summaryrefslogtreecommitdiff
path: root/sys/net
diff options
context:
space:
mode:
authorKristof Provost <kp@FreeBSD.org>2021-10-26 07:57:56 +0000
committerKristof Provost <kp@FreeBSD.org>2021-11-19 05:51:58 +0000
commit6d20b6de6ae219114049a8fd14e3bd70c10876c0 (patch)
tree4565615e61ec80942f3efb2349140f9c5a62422e /sys/net
parent706f4f705bf2bdfe7b03647feb21639996c6bcee (diff)
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if_epair.c18
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