mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
net: add missing data-race annotations around sk->sk_peek_off
sk_getsockopt() runs locklessly, thus we need to annotate the read
of sk->sk_peek_off.
While we are at it, add corresponding annotations to sk_set_peek_off()
and unix_set_peek_off().
Fixes: b9bb53f383 ("sock: convert sk_peek_offset functions to WRITE_ONCE")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
3c5b4d69c3
commit
11695c6e96
@@ -1870,7 +1870,7 @@ int sk_getsockopt(struct sock *sk, int level, int optname,
|
|||||||
if (!sock->ops->set_peek_off)
|
if (!sock->ops->set_peek_off)
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
v.val = sk->sk_peek_off;
|
v.val = READ_ONCE(sk->sk_peek_off);
|
||||||
break;
|
break;
|
||||||
case SO_NOFCS:
|
case SO_NOFCS:
|
||||||
v.val = sock_flag(sk, SOCK_NOFCS);
|
v.val = sock_flag(sk, SOCK_NOFCS);
|
||||||
@@ -3179,7 +3179,7 @@ EXPORT_SYMBOL(__sk_mem_reclaim);
|
|||||||
|
|
||||||
int sk_set_peek_off(struct sock *sk, int val)
|
int sk_set_peek_off(struct sock *sk, int val)
|
||||||
{
|
{
|
||||||
sk->sk_peek_off = val;
|
WRITE_ONCE(sk->sk_peek_off, val);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sk_set_peek_off);
|
EXPORT_SYMBOL_GPL(sk_set_peek_off);
|
||||||
|
|||||||
@@ -790,7 +790,7 @@ static int unix_set_peek_off(struct sock *sk, int val)
|
|||||||
if (mutex_lock_interruptible(&u->iolock))
|
if (mutex_lock_interruptible(&u->iolock))
|
||||||
return -EINTR;
|
return -EINTR;
|
||||||
|
|
||||||
sk->sk_peek_off = val;
|
WRITE_ONCE(sk->sk_peek_off, val);
|
||||||
mutex_unlock(&u->iolock);
|
mutex_unlock(&u->iolock);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user