GHSA-RP2G-GFW2-XG88
Vulnerability from github – Published: 2026-09-09 18:32 – Updated: 2026-09-11 12:33In the Linux kernel, the following vulnerability has been resolved:
vlan: fix skb_under_panic and races when toggling HW VLAN offload
Toggling hardware VLAN TX offload (NETIF_F_HW_VLAN_CTAG_TX or NETIF_F_HW_VLAN_STAG_TX) on a lower device invokes vlan_transfer_features(), which dynamically changed vlandev->hard_header_len.
This causes two issues: 1. Lockless TX paths (e.g. packet_snd in af_packet.c, ip6_finish_output2) read dev->hard_header_len without holding RTNL lock. Mutating hard_header_len dynamically under RTNL creates a data race where upper layers reserve insufficient headroom based on a stale hard_header_len, resulting in skb_under_panic when vlan_dev_hard_header() is called. 2. In addition, vlan_transfer_features() updated hard_header_len without updating header_ops, causing a mismatch between allocated headroom and header creation.
Always setting dev->hard_header_len = real_dev->hard_header_len and dev->needed_headroom = real_dev->needed_headroom + VLAN_HLEN unconditionally ensures: - dev->hard_header_len remains 100% static and immutable at real_dev->hard_header_len, eliminating all dynamic runtime updates and data races on hard_header_len. - Upper layers allocating skbs via LL_RESERVED_SPACE() will always reserve sufficient headroom for software VLAN tag insertion (real_dev->hard_header_len + real_dev->needed_headroom + VLAN_HLEN). - vlandev inherits real_dev->needed_tailroom so underlying trailer/padding/ICV requirements are honored. - AF_PACKET SOCK_RAW network header offsets remain correctly aligned at real_dev->hard_header_len. - vlan_header_ops is used unconditionally.
Note to stable teams: Make sure to backport these commits:
e16e960d55a4 ("ipvlan: inherit needed_headroom and needed_tailroom from phy_dev") cef51860becd ("macvlan: inherit needed_headroom and needed_tailroom from lowerdev")
{
"affected": [],
"aliases": [
"CVE-2026-80925"
],
"database_specific": {
"cwe_ids": [],
"github_reviewed": false,
"github_reviewed_at": null,
"nvd_published_at": "2026-09-09T17:17:47Z",
"severity": null
},
"details": "In the Linux kernel, the following vulnerability has been resolved:\n\nvlan: fix skb_under_panic and races when toggling HW VLAN offload\n\nToggling hardware VLAN TX offload (NETIF_F_HW_VLAN_CTAG_TX or\nNETIF_F_HW_VLAN_STAG_TX) on a lower device invokes vlan_transfer_features(),\nwhich dynamically changed vlandev-\u003ehard_header_len.\n\nThis causes two issues:\n1. Lockless TX paths (e.g. packet_snd in af_packet.c, ip6_finish_output2)\n read dev-\u003ehard_header_len without holding RTNL lock. Mutating\n hard_header_len dynamically under RTNL creates a data race where upper\n layers reserve insufficient headroom based on a stale hard_header_len,\n resulting in skb_under_panic when vlan_dev_hard_header() is called.\n2. In addition, vlan_transfer_features() updated hard_header_len without\n updating header_ops, causing a mismatch between allocated headroom\n and header creation.\n\nAlways setting dev-\u003ehard_header_len = real_dev-\u003ehard_header_len and\ndev-\u003eneeded_headroom = real_dev-\u003eneeded_headroom + VLAN_HLEN unconditionally\nensures:\n- dev-\u003ehard_header_len remains 100% static and immutable at real_dev-\u003ehard_header_len,\n eliminating all dynamic runtime updates and data races on hard_header_len.\n- Upper layers allocating skbs via LL_RESERVED_SPACE() will always reserve\n sufficient headroom for software VLAN tag insertion (real_dev-\u003ehard_header_len +\n real_dev-\u003eneeded_headroom + VLAN_HLEN).\n- vlandev inherits real_dev-\u003eneeded_tailroom so underlying trailer/padding/ICV\n requirements are honored.\n- AF_PACKET SOCK_RAW network header offsets remain correctly aligned at\n real_dev-\u003ehard_header_len.\n- vlan_header_ops is used unconditionally.\n\nNote to stable teams: Make sure to backport these commits:\n\ne16e960d55a4 (\"ipvlan: inherit needed_headroom and needed_tailroom from phy_dev\")\ncef51860becd (\"macvlan: inherit needed_headroom and needed_tailroom from lowerdev\")",
"id": "GHSA-rp2g-gfw2-xg88",
"modified": "2026-09-11T12:33:24Z",
"published": "2026-09-09T18:32:05Z",
"references": [
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-80925"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/1517d1996b5236fe69eccd9d253f725e06996eb1"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/447cbe95ebb95392b5d8f6a01c0556826919ce23"
},
{
"type": "WEB",
"url": "https://git.kernel.org/stable/c/a29f3b884ba50217e6f50414f568073221e2bb07"
}
],
"schema_version": "1.4.0",
"severity": []
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.