packet: fix races in fanout_add()
authorEric Dumazet <edumazet@google.com>
Tue, 14 Feb 2017 17:03:51 +0000 (09:03 -0800)
committerBen Hutchings <ben@decadent.org.uk>
Thu, 16 Mar 2017 02:18:50 +0000 (02:18 +0000)
commit382299a020add34cc75ac501bbcb655195c123b8
treef288911744900d7251e5a9136a7dbb35d59d06ca
parent1560f610f60a24bfd8808ac4ac7b6ab38a80811d
packet: fix races in fanout_add()

commit d199fab63c11998a602205f7ee7ff7c05c97164b upstream.

Multiple threads can call fanout_add() at the same time.

We need to grab fanout_mutex earlier to avoid races that could
lead to one thread freeing po->rollover that was set by another thread.

Do the same in fanout_release(), for peace of mind, and to help us
finding lockdep issues earlier.

Fixes: dc99f600698d ("packet: Add fanout support.")
Fixes: 0648ab70afe6 ("packet: rollover prepare: per-socket state")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[bwh: Backported to 3.2:
 - No rollover queue stats
 - Adjust context]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/packet/af_packet.c