CVE-2026-80905

net: tap: fix wrong transport_header when sending VLAN-tagged frame

State
Published
Severity
Not scored
Published
Sep 4, 2026
Updated
Oct 30, 2026
Reserved
Aug 26, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

net: tap: fix wrong transport_header when sending VLAN-tagged frame

In tap_get_user_xdp(), when processing a VLAN-tagged frame (e.g. ETH_P_8021Q), skb_set_network_header() is called first to advance network_header past the VLAN tag to the inner protocol header. skb_probe_transport_header() is then called with skb->protocol still set to ETH_P_8021Q, while nhoff (derived from skb_network_offset()) already points past the VLAN tag to the inner protocol header.

In __skb_flow_dissect(), proto is initialized to ETH_P_8021Q and nhoff points past the VLAN tag. When the dissector hits case ETH_P_8021Q, it reads a struct vlan_hdr at the current nhoff via __skb_header_pointer(), but that offset contains the inner protocol header (e.g. an IP header). The bytes are misinterpreted as a VLAN header, yielding a garbage encapsulated EtherType that matches no known protocol. The dissector returns false, so skb_probe_transport_header() never calls skb_set_transport_header(), leaving transport_header at its uninitialized sentinel value (~0U).

Move skb_set_network_header() to after skb_probe_transport_header(). At the time skb_probe_transport_header() is called, network_header still points to the VLAN header (offset ETH_HLEN), so nhoff is correct and the flow dissector can parse the VLAN header, extract the inner EtherType, and advance nhoff to the inner protocol header, allowing transport_header to be set correctly.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 8c76e77f9069f10505c08e02646c3ee11ad79038 to before a8f49e83e4447b885376e6a937d62df883cc8824Affected
  • 8c76e77f9069f10505c08e02646c3ee11ad79038 to before c0376820922d255ae1d103c32345a6ec4c3266f7Affected
  • 8c76e77f9069f10505c08e02646c3ee11ad79038 to before f1d297cad5c1eacd9fadfd0346ad97405ffbf97cAffected
  • 8c76e77f9069f10505c08e02646c3ee11ad79038 to before 5ffaa5d7f56ab24a8e23cf131eadfef31a3bbc4bAffected
  • 8c76e77f9069f10505c08e02646c3ee11ad79038 to before 88b79ac89ecc04d7f2613f7e1c0b46f0c4ddb2f3Affected
  • 8c76e77f9069f10505c08e02646c3ee11ad79038 to before cbb35cbe8db268fefe34c23df15348cf99025298Affected
  • 3cae5ef1f37a475faf7c40bc6a3c170779f3e0b1Affected
  • 4.20.1 to before 4.21Affected
LinuxLinux
  • 5.0Affected
  • before 5.0Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.160 through 6.6.*Not affected
  • 6.12.114 through 6.12.*Not affected
  • 6.18.46 through 6.18.*Not affected
  • 7.1.10 through 7.1.*Not affected
  • 7.2 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.