Message ID | 20240308112504.29099-2-kerneljasonxing@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 9eb430d40e449640122b0b33ace1f33e793ecc5f |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | annotate data-races around sysctl_tcp_wmem[0] | expand |
On Fri, Mar 8, 2024 at 12:25 PM Jason Xing <kerneljasonxing@gmail.com> wrote: > > From: Jason Xing <kernelxing@tencent.com> > > It's possible that writer and the reader can manipulate the same > sysctl knob concurrently. Using READ_ONCE() to prevent reading > an old value. > > Signed-off-by: Jason Xing <kernelxing@tencent.com> Reviewed-by: Eric Dumazet <edumazet@google.com>
On Fri, 8 Mar 2024, Jason Xing wrote: > From: Jason Xing <kernelxing@tencent.com> > > It's possible that writer and the reader can manipulate the same > sysctl knob concurrently. Using READ_ONCE() to prevent reading > an old value. > > Signed-off-by: Jason Xing <kernelxing@tencent.com> > --- > net/mptcp/protocol.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h > index f16edef6026a..a10ebf3ee10a 100644 > --- a/net/mptcp/protocol.h > +++ b/net/mptcp/protocol.h > @@ -850,7 +850,7 @@ static inline void __mptcp_sync_sndbuf(struct sock *sk) > if (sk->sk_userlocks & SOCK_SNDBUF_LOCK) > return; > > - new_sndbuf = sock_net(sk)->ipv4.sysctl_tcp_wmem[0]; > + new_sndbuf = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[0]); > mptcp_for_each_subflow(mptcp_sk(sk), subflow) { > ssk_sndbuf = READ_ONCE(mptcp_subflow_tcp_sock(subflow)->sk_sndbuf); > Looks good to me, thanks Jason. Reviewed-by: Mat Martineau <martineau@kernel.org>
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index f16edef6026a..a10ebf3ee10a 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -850,7 +850,7 @@ static inline void __mptcp_sync_sndbuf(struct sock *sk) if (sk->sk_userlocks & SOCK_SNDBUF_LOCK) return; - new_sndbuf = sock_net(sk)->ipv4.sysctl_tcp_wmem[0]; + new_sndbuf = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[0]); mptcp_for_each_subflow(mptcp_sk(sk), subflow) { ssk_sndbuf = READ_ONCE(mptcp_subflow_tcp_sock(subflow)->sk_sndbuf);