net/packet: annotate data race in packet_sendmsg()
[ Upstream commitd1b5bee4c8] There is a known race in packet_sendmsg(), addressed in commit32d3182cd2("net/packet: fix race in tpacket_snd()") Now we have data_race(), we can use it to avoid a future KCSAN warning, as syzbot loves stressing af_packet sockets :) Signed-off-by: Eric Dumazet <edumazet@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
Sasha Levin
parent
9707960ecf
commit
f57132a887
@@ -3033,10 +3033,13 @@ static int packet_sendmsg(struct socket *sock, struct msghdr *msg, size_t len)
|
|||||||
struct sock *sk = sock->sk;
|
struct sock *sk = sock->sk;
|
||||||
struct packet_sock *po = pkt_sk(sk);
|
struct packet_sock *po = pkt_sk(sk);
|
||||||
|
|
||||||
if (po->tx_ring.pg_vec)
|
/* Reading tx_ring.pg_vec without holding pg_vec_lock is racy.
|
||||||
|
* tpacket_snd() will redo the check safely.
|
||||||
|
*/
|
||||||
|
if (data_race(po->tx_ring.pg_vec))
|
||||||
return tpacket_snd(po, msg);
|
return tpacket_snd(po, msg);
|
||||||
else
|
|
||||||
return packet_snd(sock, msg, len);
|
return packet_snd(sock, msg, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user