Index: bpf.c =================================================================== RCS file: /cvs/src/sys/net/bpf.c,v retrieving revision 1.192 diff -u -p -r1.192 bpf.c --- bpf.c 18 Jun 2020 23:32:00 -0000 1.192 +++ bpf.c 11 Dec 2020 12:50:16 -0000 @@ -1312,7 +1327,7 @@ _bpf_mtap(caddr_t arg, const struct mbuf M_FLOWID)) SET(tbh.bh_flags, BPF_F_FLOWID); - m_microtime(m, &tv); + m_microtime(mp, &tv); } else microtime(&tv); @@ -1433,13 +1448,13 @@ bpf_mtap_ether(caddr_t arg, const struct { #if NVLAN > 0 struct ether_vlan_header evh; - struct m_hdr mh; + struct m_hdr mh, md; uint8_t prio; if ((m->m_flags & M_VLANTAG) == 0) #endif { - return bpf_mtap(arg, m, direction); + return _bpf_mtap(arg, m, m, direction); } #if NVLAN > 0 @@ -1456,12 +1471,16 @@ bpf_mtap_ether(caddr_t arg, const struct (prio << EVL_PRIO_BITS)); mh.mh_flags = 0; - mh.mh_data = m->m_data + ETHER_HDR_LEN; - mh.mh_len = m->m_len - ETHER_HDR_LEN; - mh.mh_next = m->m_next; + mh.mh_data = (caddr_t)&evh; + mh.mh_len = sizeof(evh); + mh.mh_next = (struct mbuf *)&md; + + md.mh_flags = 0; + md.mh_data = m->m_data + ETHER_HDR_LEN; + md.mh_len = m->m_len - ETHER_HDR_LEN; + md.mh_next = m->m_next; - return bpf_mtap_hdr(arg, &evh, sizeof(evh), - (struct mbuf *)&mh, direction); + return _bpf_mtap(arg, m, (struct mbuf *)&mh, direction); #endif }