net: annotate data-race around sk->sk_txrehash
[ Upstream commit c76a0328899bbe226f8adeb88b8da9e4167bd316 ] sk_getsockopt() runs locklessly. This means sk->sk_txrehash can be read while other threads are changing its value. Other locations were handled in commitcb6cd2cec7
("tcp: Change SYN ACK retransmit behaviour to account for rehash") Fixes:26859240e4
("txhash: Add socket option to control TX hash rethink behavior") Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Akhmat Karakotov <hmukos@yandex-team.ru> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
60d92bc9c0
commit
0317c8322d
@ -1521,7 +1521,9 @@ int sk_setsockopt(struct sock *sk, int level, int optname,
|
||||
}
|
||||
if ((u8)val == SOCK_TXREHASH_DEFAULT)
|
||||
val = READ_ONCE(sock_net(sk)->core.sysctl_txrehash);
|
||||
/* Paired with READ_ONCE() in tcp_rtx_synack() */
|
||||
/* Paired with READ_ONCE() in tcp_rtx_synack()
|
||||
* and sk_getsockopt().
|
||||
*/
|
||||
WRITE_ONCE(sk->sk_txrehash, (u8)val);
|
||||
break;
|
||||
|
||||
@ -1927,7 +1929,8 @@ int sk_getsockopt(struct sock *sk, int level, int optname,
|
||||
break;
|
||||
|
||||
case SO_TXREHASH:
|
||||
v.val = sk->sk_txrehash;
|
||||
/* Paired with WRITE_ONCE() in sk_setsockopt() */
|
||||
v.val = READ_ONCE(sk->sk_txrehash);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
Loading…
Reference in New Issue
Block a user