diff options
| author | Kristof Provost <kp@FreeBSD.org> | 2021-10-26 07:57:56 +0000 |
|---|---|---|
| committer | Kristof Provost <kp@FreeBSD.org> | 2021-11-19 05:51:58 +0000 |
| commit | 6d20b6de6ae219114049a8fd14e3bd70c10876c0 (patch) | |
| tree | 4565615e61ec80942f3efb2349140f9c5a62422e /sys/net | |
| parent | 706f4f705bf2bdfe7b03647feb21639996c6bcee (diff) | |
Diffstat (limited to 'sys/net')
| -rw-r--r-- | sys/net/if_epair.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/sys/net/if_epair.c b/sys/net/if_epair.c index 3cef6c76a2e2..2feefedb3cd9 100644 --- a/sys/net/if_epair.c +++ b/sys/net/if_epair.c @@ -196,6 +196,19 @@ struct epair_dpcpu { DPCPU_DEFINE(struct epair_dpcpu, epair_dpcpu); static void +epair_clear_mbuf(struct mbuf *m) +{ + /* Remove any CSUM_SND_TAG as ether_input will barf. */ + if (m->m_pkthdr.csum_flags & CSUM_SND_TAG) { + m_snd_tag_rele(m->m_pkthdr.snd_tag); + m->m_pkthdr.snd_tag = NULL; + m->m_pkthdr.csum_flags &= ~CSUM_SND_TAG; + } + + m_tag_delete_nonpersistent(m); +} + +static void epair_dpcpu_init(void) { struct epair_dpcpu *epair_dpcpu; @@ -434,6 +447,8 @@ epair_start_locked(struct ifnet *ifp) } DPRINTF("packet %s -> %s\n", ifp->if_xname, oifp->if_xname); + epair_clear_mbuf(m); + /* * Add a reference so the interface cannot go while the * packet is in transit as we rely on rcvif to stay valid. @@ -555,6 +570,9 @@ epair_transmit_locked(struct ifnet *ifp, struct mbuf *m) (void)epair_add_ifp_for_draining(ifp); return (error); } + + epair_clear_mbuf(m); + sc = oifp->if_softc; /* * Add a reference so the interface cannot go while the |
