7.8
/ 10
HIGH
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
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.
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.
Basic Information
ID
CVE-2026-31700
Source
Linux
Published
May 1, 2026 at 13:56
Modified
May 3, 2026 at 05:45
Affected Product
Vendor
Linux
Product
Linux
Version
1d036d25e5609ba73fee6a88db01c306b140d512
Affected Versions
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 4.6
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 1d036d25e5609ba73fee6a88db01c306b140d512
Linux Linux 4.6
References
- git.kernel.org /stable/c/74e2db36fe50e3ad9d5300d7fd0e6e2a15a6d121
- git.kernel.org /stable/c/3a1bf9116ea31470b89692585c3910dfe830dcdd
- git.kernel.org /stable/c/28324a3b62d9ce7f9bdd65a8ce63f382041d1b27
- git.kernel.org /stable/c/48a6ef291a17639e1b6ae0fbe9c8b2bb87d7804b
- git.kernel.org /stable/c/2c054e17d9d41f1020376806c7f750834ced4dc5