diff options
author | Eric Dumazet <edumazet@google.com> | 2023-03-15 23:57:44 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-03-17 11:25:05 +0300 |
commit | e13ec3da05d130f0d10da8e1fbe1be26dcdb0e27 (patch) | |
tree | 87c774f8a05afcf7ae1993b2fb1b2416bbabc922 /net/ipv4/tcp_ipv4.c | |
parent | 2f2d9972affae1f3282eff97c794cf843aedf61e (diff) | |
download | linux-e13ec3da05d130f0d10da8e1fbe1be26dcdb0e27.tar.xz |
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_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 4f6894469b62..89daa6b953ff 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -596,7 +596,7 @@ int tcp_v4_err(struct sk_buff *skb, u32 info) ip_icmp_error(sk, skb, err, th->dest, info, (u8 *)th); if (!sock_owned_by_user(sk)) { - sk->sk_err = err; + WRITE_ONCE(sk->sk_err, err); sk_error_report(sk); @@ -625,7 +625,7 @@ int tcp_v4_err(struct sk_buff *skb, u32 info) inet = inet_sk(sk); if (!sock_owned_by_user(sk) && inet->recverr) { - sk->sk_err = err; + WRITE_ONCE(sk->sk_err, err); sk_error_report(sk); } else { /* Only an error on timeout */ WRITE_ONCE(sk->sk_err_soft, err); |