CVE-2026-80977
largeShared zerocopy state corruption in Linux kernel via Open vSwitch recirculation clones
A flaw in the Linux kernel networking stack allows skb_tx_error() to modify zerocopy state held in skb_shinfo(), which is shared with every clone, so a cloned skb can prematurely tell the zerocopy producer its pages are free and drop SKBFL_SHARED_FRAG while the original packet is still in flight. The bug is reachable through Open vSwitch when a non-last OVS_ACTION_ATTR_RECIRC action feeds an skb_clone() into ovs_dp_process_packet() while do_execute_actions() keeps forwarding the original; a flow miss on the clone strips the zerocopy markers from the still-in-flight packet. A later local ESP (IPsec) delivery then decrypts in place over fragments it does not privately own, causing kernel memory corruption with high impact on confidentiality, integrity and availability (CVSS 3.1: 7.8; local attack vector, low privileges required, no user interaction). Practical exposure is limited to hosts running the OVS kernel datapath with recirculation actions combined with zerocopy transmit and local ESP delivery, not generic Linux systems. No public PoC exists, the issue is not in CISA's KEV, and no exploitation has been reported.
What to do: Update to a kernel release or vendor backport containing the upstream fix that skips touching shared zerocopy state for cloned skbs in skb_tx_error(); track your distro's stable kernel updates for the patch. Until patched, avoid OVS pipelines where a recirculation action is not the last action on zerocopy-transmitted packets that also undergo local ESP/IPsec delivery, and audit OVS hosts with tunnels and IPsec for kernel crashes or page-refcount anomalies.
| Linux kernel | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: net: skbuff: don't touch shared zerocopy state in skb_tx_error() skb_tx_error() completes the zerocopy uarg and clears SKBFL_ALL_ZEROCOPY, and skb_zcopy_downgrade_managed() clears SKBFL_MANAGED_FRAG_REFS. Both live in skb_shinfo(), which every clone shares, while the caller only owns the reference it is about to drop. Through a clone it tells the producer its pages are free and drops SKBFL_SHARED_FRAG for an skb that is still in flight. Open vSwitch reaches this with a non-last OVS_ACTION_ATTR_RECIRC: clone_execute() sends a skb_clone() into ovs_dp_process_packet() while do_execute_actions() keeps forwarding the original, and skb_clone() does not privatise the frags here -- skb_orphan_frags() returns early on SKBFL_DONT_ORPHAN. A flow miss on the clone then strips the marker from the packet still being forwarded, and a later local ESP delivery decrypts in place over frags it does not own privately. Skip it for a cloned skb. Nothing is lost: skb_release_data() clears the zerocopy state once the last reference to the shared data goes.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.