net: annotate data-race around sk->sk_txrehash
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>
This commit is contained in:
parent
fe11fdcb42
commit
c76a032889
|
@ -1534,7 +1534,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;
|
||||
|
||||
|
@ -1978,7 +1980,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