aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKristof Provost <kp@FreeBSD.org>2023-04-10 11:02:55 +0000
committerKristof Provost <kp@FreeBSD.org>2023-04-10 13:55:35 +0000
commitc69ae8419734829404bdb47d694d105c85f9835e (patch)
tree9b1ff9e285281623dcef9277d4c8455c4b0bb8f2
parentd73acb32d3343d14c29a995160c007aeadfa79f3 (diff)
downloadsrc-c69ae8419734829404bdb47d694d105c85f9835e.tar.gz
src-c69ae8419734829404bdb47d694d105c85f9835e.zip
if_epair: also remove vlan metadata from mbufs
We already remove mbuf tags from packets transitting an if_epair, but we didn't remove vlan metadata. In certain configurations this could lead to unexpected vlan tags turning up on the rx side. PR: 270736 Reviewed by: markj MFC after: 1 week Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D39482
-rw-r--r--sys/net/if_epair.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/sys/net/if_epair.c b/sys/net/if_epair.c
index aeed993249f5..e9e1a48b3d58 100644
--- a/sys/net/if_epair.c
+++ b/sys/net/if_epair.c
@@ -133,6 +133,8 @@ static struct epair_tasks_t epair_tasks;
static void
epair_clear_mbuf(struct mbuf *m)
{
+ M_ASSERTPKTHDR(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);
@@ -140,6 +142,10 @@ epair_clear_mbuf(struct mbuf *m)
m->m_pkthdr.csum_flags &= ~CSUM_SND_TAG;
}
+ /* Clear vlan information. */
+ m->m_flags &= ~M_VLANTAG;
+ m->m_pkthdr.ether_vtag = 0;
+
m_tag_delete_nonpersistent(m);
}