mirror of
https://github.com/torvalds/linux.git
synced 2026-04-18 06:44:00 -04:00
net: annotate data-races around sk->sk_{data_ready,write_space}
skmsg (and probably other layers) are changing these pointers
while other cpus might read them concurrently.
Add corresponding READ_ONCE()/WRITE_ONCE() annotations
for UDP, TCP and AF_UNIX.
Fixes: 604326b41a ("bpf, sockmap: convert to generic sk_msg interface")
Reported-by: syzbot+87f770387a9e5dc6b79b@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/netdev/699ee9fc.050a0220.1cd54b.0009.GAE@google.com/
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Daniel Borkmann <daniel@iogearbox.net>
Cc: John Fastabend <john.fastabend@gmail.com>
Cc: Jakub Sitnicki <jakub@cloudflare.com>
Cc: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260225131547.1085509-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
754a3d081a
commit
2ef2b20cf4
@@ -1785,7 +1785,7 @@ restart:
|
||||
__skb_queue_tail(&other->sk_receive_queue, skb);
|
||||
spin_unlock(&other->sk_receive_queue.lock);
|
||||
unix_state_unlock(other);
|
||||
other->sk_data_ready(other);
|
||||
READ_ONCE(other->sk_data_ready)(other);
|
||||
sock_put(other);
|
||||
return 0;
|
||||
|
||||
@@ -2278,7 +2278,7 @@ restart_locked:
|
||||
scm_stat_add(other, skb);
|
||||
skb_queue_tail(&other->sk_receive_queue, skb);
|
||||
unix_state_unlock(other);
|
||||
other->sk_data_ready(other);
|
||||
READ_ONCE(other->sk_data_ready)(other);
|
||||
sock_put(other);
|
||||
scm_destroy(&scm);
|
||||
return len;
|
||||
@@ -2351,7 +2351,7 @@ static int queue_oob(struct sock *sk, struct msghdr *msg, struct sock *other,
|
||||
|
||||
sk_send_sigurg(other);
|
||||
unix_state_unlock(other);
|
||||
other->sk_data_ready(other);
|
||||
READ_ONCE(other->sk_data_ready)(other);
|
||||
|
||||
return 0;
|
||||
out_unlock:
|
||||
@@ -2477,7 +2477,7 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg,
|
||||
spin_unlock(&other->sk_receive_queue.lock);
|
||||
|
||||
unix_state_unlock(other);
|
||||
other->sk_data_ready(other);
|
||||
READ_ONCE(other->sk_data_ready)(other);
|
||||
sent += size;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user