Index: if.c =================================================================== RCS file: /cvs/src/sys/net/if.c,v retrieving revision 1.433 diff -u -p -r1.433 if.c --- if.c 18 May 2016 03:46:03 -0000 1.433 +++ if.c 3 Jun 2016 11:08:36 -0000 @@ -617,9 +617,14 @@ if_input(struct ifnet *ifp, struct mbuf_ #if NBPFILTER > 0 if_bpf = ifp->if_bpf; if (if_bpf) { - MBUF_LIST_FOREACH(ml, m) + struct mbuf_list l = MBUF_LIST_INITIALIZER(); + while ((m = ml_dequeue(ml)) != NULL) { if (bpf_mtap_ether(if_bpf, m, BPF_DIRECTION_IN) != 0) - m->m_flags |= M_FILDROP; + m_freem(m); + else + ml_enqueue(&l, m); + } + *ml = l; } #endif Index: if_ethersubr.c =================================================================== RCS file: /cvs/src/sys/net/if_ethersubr.c,v retrieving revision 1.237 diff -u -p -r1.237 if_ethersubr.c --- if_ethersubr.c 31 May 2016 07:48:19 -0000 1.237 +++ if_ethersubr.c 3 Jun 2016 11:08:36 -0000 @@ -344,11 +344,10 @@ ether_input(struct ifnet *ifp, struct mb } /* - * If packet has been filtered by the bpf listener, drop it now - * also HW vlan tagged packets that were not collected by vlan(4) + * HW vlan tagged packets that were not collected by vlan(4) * must be dropped now. */ - if (m->m_flags & (M_FILDROP | M_VLANTAG)) { + if (m->m_flags & M_VLANTAG) { m_freem(m); return (1); }