Skip to content

Commit 58ebb1c

Browse files
q2vendavem330
authored andcommitted
tcp: Fix data-races around sysctl_tcp_dsack.
While reading sysctl_tcp_dsack, it can be changed concurrently. Thus, we need to add READ_ONCE() to its readers. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Kuniyuki Iwashima <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent ebbbe23 commit 58ebb1c

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

net/ipv4/tcp_input.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4426,7 +4426,7 @@ static void tcp_dsack_set(struct sock *sk, u32 seq, u32 end_seq)
44264426
{
44274427
struct tcp_sock *tp = tcp_sk(sk);
44284428

4429-
if (tcp_is_sack(tp) && sock_net(sk)->ipv4.sysctl_tcp_dsack) {
4429+
if (tcp_is_sack(tp) && READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_dsack)) {
44304430
int mib_idx;
44314431

44324432
if (before(seq, tp->rcv_nxt))
@@ -4473,7 +4473,7 @@ static void tcp_send_dupack(struct sock *sk, const struct sk_buff *skb)
44734473
NET_INC_STATS(sock_net(sk), LINUX_MIB_DELAYEDACKLOST);
44744474
tcp_enter_quickack_mode(sk, TCP_MAX_QUICKACKS);
44754475

4476-
if (tcp_is_sack(tp) && sock_net(sk)->ipv4.sysctl_tcp_dsack) {
4476+
if (tcp_is_sack(tp) && READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_dsack)) {
44774477
u32 end_seq = TCP_SKB_CB(skb)->end_seq;
44784478

44794479
tcp_rcv_spurious_retrans(sk, skb);

0 commit comments

Comments
 (0)