Index: net/if.c =================================================================== RCS file: /cvs/src/sys/net/if.c,v retrieving revision 1.429 diff -u -p -r1.429 if.c --- net/if.c 16 Mar 2016 12:08:09 -0000 1.429 +++ net/if.c 15 Apr 2016 04:45:21 -0000 @@ -615,7 +615,8 @@ if_input(struct ifnet *ifp, struct mbuf_ if_bpf = ifp->if_bpf; if (if_bpf) { MBUF_LIST_FOREACH(ml, m) - bpf_mtap_ether(if_bpf, m, BPF_DIRECTION_IN); + if (bpf_mtap_ether(if_bpf, m, BPF_DIRECTION_IN) != 0) + m->m_flags |= M_FILDROP; } #endif Index: net80211/ieee80211_input.c =================================================================== RCS file: /cvs/src/sys/net80211/ieee80211_input.c,v retrieving revision 1.171 diff -u -p -r1.171 ieee80211_input.c --- net80211/ieee80211_input.c 15 Apr 2016 03:04:27 -0000 1.171 +++ net80211/ieee80211_input.c 15 Apr 2016 04:45:21 -0000 @@ -546,14 +546,12 @@ ieee80211_input(struct ifnet *ifp, struc if (ifp->if_flags & IFF_DEBUG) ieee80211_input_print(ic, ifp, wh, rxi); #if NBPFILTER > 0 - if (ic->ic_rawbpf) - bpf_mtap(ic->ic_rawbpf, m, BPF_DIRECTION_IN); - /* - * Drop mbuf if it was filtered by bpf. Normally, this is - * done in ether_input() but IEEE 802.11 management frames - * are a special case. - */ - if (m->m_flags & M_FILDROP) { + if (bpf_mtap(ic->ic_rawbpf, m, BPF_DIRECTION_IN) != 0) { + /* + * Drop mbuf if it was filtered by bpf. Normally, + * this is done in ether_input() but IEEE 802.11 + * management frames are a special case. + */ m_freem(m); return; }