diff options
author | Kristof Provost <kp@FreeBSD.org> | 2023-04-10 11:02:55 +0000 |
---|---|---|
committer | Kristof Provost <kp@FreeBSD.org> | 2023-04-10 13:55:35 +0000 |
commit | c69ae8419734829404bdb47d694d105c85f9835e (patch) | |
tree | 9b1ff9e285281623dcef9277d4c8455c4b0bb8f2 | |
parent | d73acb32d3343d14c29a995160c007aeadfa79f3 (diff) | |
download | src-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.c | 6 |
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); } |