Do not call bpf_catchpacket() if another CPU detached a file from the
authormpi <mpi@openbsd.org>
Wed, 7 Oct 2015 08:41:01 +0000 (08:41 +0000)
committermpi <mpi@openbsd.org>
Wed, 7 Oct 2015 08:41:01 +0000 (08:41 +0000)
commitba3030253b192b062d8d5ec920c98866d4612f15
tree2efe47e922333ffbb24e2d94611203324b543aa8
parente31967d1cfa18b60fe97bec0544b50facdf1b54e
Do not call bpf_catchpacket() if another CPU detached a file from the
corresponding interface.

bfp_tap() and _bpf_mtap() are mostly run without the KERNEL_LOCK.  The
use of SRPs in these functions gives us the guarantees that manipulated
BPF descriptors are alive but not the associated interface desctiptor!
And indeed they can be cleared by another CPU running bpf_detachd().

Prevent a race reported by Hrvoje Popovski when closing tcpdump(8) with
an IPL_MPSAFE ix(4).

ok mikeb@, dlg@, deraadt@
sys/net/bpf.c