[PATCH net 0/2] packet: fix PACKET_TX_RING data corruption on skb_orphan
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2026-09-14 21:42:35
From: Willem de Bruijn <willemb@google.com> When transmitting packets via PACKET_TX_RING, tpacket_snd links user ring buffer pages as skb frags and releases the slot on skb->destructor (tpacket_destruct_skb). skb_orphan() invokes the destructor while the skb is still alive. This marks the slot as TP_STATUS_AVAILABLE prematurely, allowing userspace to overwrite the slot and causing data corruption. This series fixes the issue by switching PACKET_TX_RING to standard ubuf_info zerocopy completion, ensuring ring slots are released only after all payload references are freed or copied. Virtio-net needs a separate solution, because deferring the release can cause deadlock in its !use_napi mode. - Patch 1 addresses the virtio-net special case. - Patch 2 converts tpacket_snd to standard ubuf_info completion Patch 1 must be applied, and backported, before patch 2. Both carry the same Fixes tag for that reason. Willem de Bruijn (2): virtio_net: copy zerocopy frags in start_xmit without NAPI packet: use ubuf_info completion for TX_RING packets drivers/net/virtio_net.c | 7 ++++ include/linux/skbuff.h | 19 +--------- net/packet/af_packet.c | 82 +++++++++++++++++++++++++++------------- 3 files changed, 63 insertions(+), 45 deletions(-) -- 2.55.0.1032.g73a4cd73de-goog