aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorEric Dumazet <edumazet@google.com>2019-10-09 18:32:35 -0400
committerJakub Kicinski <jakub.kicinski@netronome.com>2019-10-10 00:43:00 -0400
commiteac66402d1c342f07ff38f8d631ff95eb7ad3220 (patch)
treed25d4b62d8f9a01ed18b820307bfb0080a26a28f /net/ipv4
parent8265792bf8871acc2d00fd03883d830e2249d395 (diff)
net: annotate sk->sk_rcvlowat lockless reads
sock_rcvlowat() or int_sk_rcvlowat() might be called without the socket lock for example from tcp_poll(). Use READ_ONCE() to document the fact that other cpus might change sk->sk_rcvlowat under us and avoid KCSAN splats. Use WRITE_ONCE() on write sides too. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/tcp.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
index 888c92b63f5a..8781a92ea4b6 100644
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1699,7 +1699,7 @@ int tcp_set_rcvlowat(struct sock *sk, int val)
1699 else 1699 else
1700 cap = sock_net(sk)->ipv4.sysctl_tcp_rmem[2] >> 1; 1700 cap = sock_net(sk)->ipv4.sysctl_tcp_rmem[2] >> 1;
1701 val = min(val, cap); 1701 val = min(val, cap);
1702 sk->sk_rcvlowat = val ? : 1; 1702 WRITE_ONCE(sk->sk_rcvlowat, val ? : 1);
1703 1703
1704 /* Check if we need to signal EPOLLIN right now */ 1704 /* Check if we need to signal EPOLLIN right now */
1705 tcp_data_ready(sk); 1705 tcp_data_ready(sk);