Skip to content

Commit 4845b57

Browse files
q2vendavem330
authored andcommitted
tcp: Fix data-races around sysctl_tcp_slow_start_after_idle.
While reading sysctl_tcp_slow_start_after_idle, it can be changed concurrently. Thus, we need to add READ_ONCE() to its readers. Fixes: 35089bb ("[TCP]: Add tcp_slow_start_after_idle sysctl.") Signed-off-by: Kuniyuki Iwashima <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 7c6f2a8 commit 4845b57

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

include/net/tcp.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1403,8 +1403,8 @@ static inline void tcp_slow_start_after_idle_check(struct sock *sk)
14031403
struct tcp_sock *tp = tcp_sk(sk);
14041404
s32 delta;
14051405

1406-
if (!sock_net(sk)->ipv4.sysctl_tcp_slow_start_after_idle || tp->packets_out ||
1407-
ca_ops->cong_control)
1406+
if (!READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_slow_start_after_idle) ||
1407+
tp->packets_out || ca_ops->cong_control)
14081408
return;
14091409
delta = tcp_jiffies32 - tp->lsndtime;
14101410
if (delta > inet_csk(sk)->icsk_rto)

net/ipv4/tcp_output.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1898,7 +1898,7 @@ static void tcp_cwnd_validate(struct sock *sk, bool is_cwnd_limited)
18981898
if (tp->packets_out > tp->snd_cwnd_used)
18991899
tp->snd_cwnd_used = tp->packets_out;
19001900

1901-
if (sock_net(sk)->ipv4.sysctl_tcp_slow_start_after_idle &&
1901+
if (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_slow_start_after_idle) &&
19021902
(s32)(tcp_jiffies32 - tp->snd_cwnd_stamp) >= inet_csk(sk)->icsk_rto &&
19031903
!ca_ops->cong_control)
19041904
tcp_cwnd_application_limited(sk);

0 commit comments

Comments
 (0)