net: add missing data-race annotations around sk->sk_peek_off
[ Upstream commit11695c6e96] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
11e0590af3
commit
ad417bab9d
+2
-2
@@ -1517,7 +1517,7 @@ int sock_getsockopt(struct socket *sock, 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);
|
||||||
@@ -2745,7 +2745,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);
|
||||||
|
|||||||
+1
-1
@@ -697,7 +697,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