diff options
author | Eric Dumazet <edumazet@google.com> | 2019-10-11 06:17:44 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-10-13 20:13:08 +0300 |
commit | ebb3b78db7bf842270a46fd4fe7cc45c78fa5ed6 (patch) | |
tree | 9a0ecbc667473f785c77851f2db6c31f1fa3d2a4 /net/core/skbuff.c | |
parent | d9b55bf7b6788ec0bd1db1acefbc4feb1399144a (diff) | |
download | linux-ebb3b78db7bf842270a46fd4fe7cc45c78fa5ed6.tar.xz |
tcp: annotate sk->sk_rcvbuf lockless reads
For the sake of tcp_poll(), there are few places where we fetch
sk->sk_rcvbuf while this field can change from IRQ or other cpu.
We need to add READ_ONCE() annotations, and also make sure write
sides use corresponding WRITE_ONCE() to avoid store-tearing.
Note that other transports probably need similar fixes.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/skbuff.c')
-rw-r--r-- | net/core/skbuff.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 529133611ea2..8c178703467b 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -4415,7 +4415,7 @@ static void skb_set_err_queue(struct sk_buff *skb) int sock_queue_err_skb(struct sock *sk, struct sk_buff *skb) { if (atomic_read(&sk->sk_rmem_alloc) + skb->truesize >= - (unsigned int)sk->sk_rcvbuf) + (unsigned int)READ_ONCE(sk->sk_rcvbuf)) return -ENOMEM; skb_orphan(skb); |