aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2024-03-11 10:37:41 +0000
committerDavid S. Miller <davem@davemloft.net>2024-03-11 10:37:41 +0000
commitad32b3c35c8ef57a2c2b9aee24ac1796d0522aeb (patch)
tree8db546ff0658cc827f43f0c66cb950d0942e411d
parent900b2801bf250affe410193a0d27a2ba9f2db4e5 (diff)
parent683a67da95616c91a85b98e41dc8eefe9f2b29e7 (diff)
downloadlinux-can-next-ad32b3c35c8ef57a2c2b9aee24ac1796d0522aeb.tar.gz
Merge branch 'tcp-wmem-data-races'
Jason Xing says: ==================== annotate data-races around sysctl_tcp_wmem[0] Adding simple READ_ONCE() can avoid reading the sysctl knob meanwhile someone is trying to change it. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv4/tcp.c2
-rw-r--r--net/mptcp/protocol.h2
2 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index b091149742b1d0..d20b62d521712a 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -975,7 +975,7 @@ int tcp_wmem_schedule(struct sock *sk, int copy)
* Use whatever is left in sk->sk_forward_alloc and tcp_wmem[0]
* to guarantee some progress.
*/
- left = sock_net(sk)->ipv4.sysctl_tcp_wmem[0] - sk->sk_wmem_queued;
+ left = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[0]) - sk->sk_wmem_queued;
if (left > 0)
sk_forced_mem_schedule(sk, min(left, copy));
return min(copy, sk->sk_forward_alloc);
diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index f16edef6026a3b..a10ebf3ee10a1e 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);