diff options
author | Eric Dumazet <edumazet@google.com> | 2023-03-15 20:57:44 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-03-17 08:25:05 +0000 |
commit | e13ec3da05d130f0d10da8e1fbe1be26dcdb0e27 (patch) | |
tree | 87c774f8a05afcf7ae1993b2fb1b2416bbabc922 /net/ipv4/tcp_input.c | |
parent | 2f2d9972affae1f3282eff97c794cf843aedf61e (diff) | |
download | linux-e13ec3da05d130f0d10da8e1fbe1be26dcdb0e27.tar.gz linux-e13ec3da05d130f0d10da8e1fbe1be26dcdb0e27.tar.bz2 linux-e13ec3da05d130f0d10da8e1fbe1be26dcdb0e27.zip |
tcp: annotate lockless access to sk->sk_err
tcp_poll() reads sk->sk_err without socket lock held/owned.
We should used READ_ONCE() here, and update writers
to use WRITE_ONCE().
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 8b5b6ca6617d..754ddbe0577f 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -4322,15 +4322,15 @@ void tcp_reset(struct sock *sk, struct sk_buff *skb) /* We want the right error as BSD sees it (and indeed as we do). */ switch (sk->sk_state) { case TCP_SYN_SENT: - sk->sk_err = ECONNREFUSED; + WRITE_ONCE(sk->sk_err, ECONNREFUSED); break; case TCP_CLOSE_WAIT: - sk->sk_err = EPIPE; + WRITE_ONCE(sk->sk_err, EPIPE); break; case TCP_CLOSE: return; default: - sk->sk_err = ECONNRESET; + WRITE_ONCE(sk->sk_err, ECONNRESET); } /* This barrier is coupled with smp_rmb() in tcp_poll() */ smp_wmb(); |