HIGH
net HeaderValidation OOB
CVE-2026-80731
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI6.3MEDIUM
01Description
In the Linux kernel, the following vulnerability has been resolved: net: remove CAP_SYS_RAWIO zero-padding in dev_validate_header dev_validate_header() reads dev->hard_header_len directly when zero-padding short link layer headers for CAP_SYS_RAWIO holders: if (capable(CAP_SYS_RAWIO)) { memset(ll_header + len, 0, dev->hard_header_len - len); return true; } Packet send paths call dev_validate_header() on skbs whose headroom was allocated from an earlier hard_header_len read. If the device is reconfigured so that dev->hard_header_len increases before validation, the memset writes past the reserved buffer, an out-of-bounds write. This out-of-bounds write is masked in some SOCK_RAW paths today because the same concurrent increase can first make skb_push() exceed the reserved headroom and trigger skb_under_panic(). Remove the zero-padding branch before making those hard_header_len reads consistent, so the snapshot fixes do not turn a loud panic into a silent overwrite. This path is only reached for variable length L2 protocols, where len < hard_header_len but len >= min_header_len. No remaining in-tree variable length L2 protocol implements header_ops->validate, and the CAP_SYS_RAWIO bypass that zero-pads and accepts short headers has no real value beyond allowing testing of intentionally malformed input. Drop the CAP_SYS_RAWIO branch. The remaining reads of dev->hard_header_len in dev_validate_header() are comparisons only and have no memory safety impact.
02KernelScan AI Analysis
Risk summary
A local attacker holding CAP_SYS_RAWIO can trigger an out-of-bounds heap write by racing a network device reconfiguration that increases hard_header_len against raw packet header validation. The zero-padding memset writes past the allocated skb buffer, corrupting adjacent kernel heap memory. Exploitation requires winning a narrow race window and possessing root-level capabilities.
Vulnerability analysis
When a privileged process sends a raw packet with a short link-layer header, the kernel attempts to zero-pad the header to match the device's current maximum header size. The packet buffer was reserved based on an earlier read of that size, so if the device is reconfigured to a larger value in the window between allocation and validation, the padding operation writes beyond the reserved buffer into adjacent heap memory. The fix removes the special branch that performed zero-padding for privileged raw I/O operations, so short headers are no longer padded and the unsafe write is eliminated. The vulnerable path is reachable only from a local process holding a specific root-level capability not obtainable in user namespaces, and the race additionally requires the ability to reconfigure a network device, typically needing administrative privileges.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 3.16 | 3.16.36 | 3.17 | fa6d98dd925e |
| 3.2 | 3.2.80 | 3.2.81 | 53fd7f912c08 |
| 4.1 | 4.1.28 | 4.2 | 8fc981640416 |
| 4.4 | 4.4.8 | 4.5 | b0f92a5731dc |
| 4.5 | 4.5.2 | 4.6 | 99df6b7a713f |
| 5.10 | — | 5.10.265 | 74e035f07f53 |
| 5.15 | — | 5.15.216 | dbb30dc943a9 |
| 6.1 | — | 6.1.183 | fc902f52a022 |
| 6.12 | — | 6.12.104 | — |
| 6.18 | — | 6.18.45 | — |
| 6.6 | — | 6.6.152 | 3b9a324e646d |
| 7.1 | — | 7.1.9 | — |
| mainline | — | 7.2 | — |
| cip/4.19 | — | 4.19.325-cip136 | ff9b53702095 |
| cip/4.19-rt | — | 4.19.325-cip136-rt50 | ff9b53702095 |
| cip/4.4 | — | 4.4.302-cip115 | c69538a72e5f |
| cip/4.4-rt | — | 4.4.302-cip115-rt63 | c69538a72e5f |
| cip/5.10 | — | 5.10.268-cip77 | fa6d98dd925e |
| cip/5.10-rt | — | 5.10.268-cip77-rt34 | fa6d98dd925e |
| cip/6.1 | — | 6.1.187-cip60 | b0f92a5731dc |
| cip/6.1-rt | — | 6.1.189-cip61-rt32 | b0f92a5731dc |
| cip/6.12 | — | 6.12.104-cip30 | 74e035f07f53 |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.104-cip30 |
| cip/6.1 | Fixed in 6.1.187-cip60 |
| cip/6.1-rt | Fixed in 6.1.189-cip61-rt32 |
| cip/5.10 | Fixed in 5.10.268-cip77 |
| cip/5.10-rt | Fixed in 5.10.268-cip77-rt34 |
| cip/4.19 | Fixed in 4.19.325-cip136 |
| cip/4.19-rt | Fixed in 4.19.325-cip136-rt50 |
| cip/4.4 | Fixed in 4.4.302-cip115 |
| cip/4.4-rt | Fixed in 4.4.302-cip115-rt63 |