PT-2026-116722 · Linux · Linux

CVE-2026-98503

·

Published

2026-10-18

·

Updated

2026-10-18

None

No severity ratings or metrics are available. When they are, we'll update the corresponding info on the page.
In the Linux kernel, the following vulnerability has been resolved:
packet: use ubuf info completion for TX RING packets
tpacket snd sends skbs with frags pointing into its ring slots. Slots are released when skb->destructor is called.
A call to skb orphan calls skb->destructor before the skb is freed. This can cause the slot to be reused while still linked into the skb.
Switch to standard zerocopy completion (ubuf info) so the slot is only released once all references to the payload are freed or copied. Restore skb->destructor to standard sock wfree.
The ubuf info completion callback can be called with a NULL skb, but only from net zcopy put and related API, used by zerocopy implementations that hold their own reference on the uarg, such as MSG ZEROCOPY. This uarg is only ever completed from skb zcopy clear, so skb is always set.
To prevent userspace from aliasing in-flight state on shared ring slots, allocate tpacket uarg per packet, rather than per slot. This adds a small allocation to the transmit path. Use standard kmalloc to allow backporting to stable kernels.
The uarg holds an sk wmem alloc reference, rather than an sk refcnt reference. packet free tx ring waits on sk wmem alloc before freeing the ring pages. Always allocate vec->deferred for tx ring so page-backed rings also wait on sk wmem alloc when skb copy ubufs drops page refs before calling tpacket ubuf complete.
Drop the tx ring.pg vec test that tpacket destruct skb performed before accessing the slot. The sk wmem alloc reference now guarantees that the slot is valid. The test is also not sufficient by itself, as it reads pg vec without pg vec lock, so it can race with packet set ring.
As a result a slot is released when its payload is copied, which can be before transmission (e.g., in skb orphan frags rx). If copied before skb tx timestamp() is called, no slot timestamp is recorded, similar to when skb orphan() was called early in the datapath before this patch.
Revert the now unused previous skb zcopy .. nouarg infra.
Depends on commit 992cc9f94ca9 ("net/packet: defer vmalloc TX RING free until skbs finish").
Found an issue in the description? Have something to add? Feel free to write us 👾

Related Identifiers

CVE-2026-98503

Affected Products

Linux