mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-04-24 14:07:52 -04:00
af_unix: Annotate data-races around sk->sk_sndbuf.
[ Upstream commit b0632e53e0da8054e36bc973f0eec69d30f1b7c6 ]
sk_setsockopt() changes sk->sk_sndbuf under lock_sock(), but it's
not used in af_unix.c.
Let's use READ_ONCE() to read sk->sk_sndbuf in unix_writable(),
unix_dgram_sendmsg(), and unix_stream_sendmsg().
Fixes: 1da177e4c3
("Linux-2.6.12-rc2")
Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
4398f59518
commit
996ec22ff5
1 changed files with 3 additions and 3 deletions
|
@ -534,7 +534,7 @@ static int unix_dgram_peer_wake_me(struct sock *sk, struct sock *other)
|
|||
static int unix_writable(const struct sock *sk, unsigned char state)
|
||||
{
|
||||
return state != TCP_LISTEN &&
|
||||
(refcount_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf;
|
||||
(refcount_read(&sk->sk_wmem_alloc) << 2) <= READ_ONCE(sk->sk_sndbuf);
|
||||
}
|
||||
|
||||
static void unix_write_space(struct sock *sk)
|
||||
|
@ -1944,7 +1944,7 @@ static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
|
|||
}
|
||||
|
||||
err = -EMSGSIZE;
|
||||
if (len > sk->sk_sndbuf - 32)
|
||||
if (len > READ_ONCE(sk->sk_sndbuf) - 32)
|
||||
goto out;
|
||||
|
||||
if (len > SKB_MAX_ALLOC) {
|
||||
|
@ -2223,7 +2223,7 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg,
|
|||
&err, 0);
|
||||
} else {
|
||||
/* Keep two messages in the pipe so it schedules better */
|
||||
size = min_t(int, size, (sk->sk_sndbuf >> 1) - 64);
|
||||
size = min_t(int, size, (READ_ONCE(sk->sk_sndbuf) >> 1) - 64);
|
||||
|
||||
/* allow fallback to order-0 allocations */
|
||||
size = min_t(int, size, SKB_MAX_HEAD(0) + UNIX_SKB_FRAGS_SZ);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue