forked from Minki/linux
tcp: Fix data-races around sysctl_tcp_migrate_req.
While reading sysctl_tcp_migrate_req, it can be changed concurrently.
Thus, we need to add READ_ONCE() to its readers.
Fixes: f9ac779f88
("net: Introduce net.ipv4.tcp_migrate_req.")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f2e383b5bb
commit
4177f54589
@ -387,7 +387,7 @@ void reuseport_stop_listen_sock(struct sock *sk)
|
||||
prog = rcu_dereference_protected(reuse->prog,
|
||||
lockdep_is_held(&reuseport_lock));
|
||||
|
||||
if (sock_net(sk)->ipv4.sysctl_tcp_migrate_req ||
|
||||
if (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_migrate_req) ||
|
||||
(prog && prog->expected_attach_type == BPF_SK_REUSEPORT_SELECT_OR_MIGRATE)) {
|
||||
/* Migration capable, move sk from the listening section
|
||||
* to the closed section.
|
||||
@ -545,7 +545,7 @@ struct sock *reuseport_migrate_sock(struct sock *sk,
|
||||
hash = migrating_sk->sk_hash;
|
||||
prog = rcu_dereference(reuse->prog);
|
||||
if (!prog || prog->expected_attach_type != BPF_SK_REUSEPORT_SELECT_OR_MIGRATE) {
|
||||
if (sock_net(sk)->ipv4.sysctl_tcp_migrate_req)
|
||||
if (READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_migrate_req))
|
||||
goto select_by_hash;
|
||||
goto failure;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user