FAILED: patch "[PATCH] net: skbuff: don't touch shared zerocopy state in" failed to apply to 5.10-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x f66bdb1cc0fcd227a062378f8be0b5873aa5600a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090310-contort-crabmeat-e1bf@gregkh' --subject-prefix 'PATCH 5.10.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From f66bdb1cc0fcd227a062378f8be0b5873aa5600a Mon Sep 17 00:00:00 2001
From: Norbert Szetei <[email protected]>
Date: Sat, 22 Aug 2026 11:15:08 +0200
Subject: [PATCH] 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.
net/core/skbuff.c +4 -1
@@ -1417,10 +1417,13 @@ EXPORT_SYMBOL(skb_dump);* * Report xmit error if a device callback is tracking this skb. * skb must be freed afterwards. +* +* Does nothing for a cloned skb: the zerocopy state lives in +* skb_shinfo(), which the clones share. */ void skb_tx_error (struct sk_buff *skb) { -if (skb) { +if (skb && !skb_cloned (skb)) {skb_zcopy_downgrade_managed (skb);skb_zcopy_clear (skb, true); }
PATCH 1/1 net: skbuff: don't touch shared zerocopy state in skb_tx_error()
From: Norbert Szetei <[email protected]>
[ Upstream commit f66bdb1cc0fcd227a062378f8be0b5873aa5600a ]
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.
--- net/core/skbuff.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
net/core/skbuff.c +5 -1
@@ -825,10 +825,14 @@ EXPORT_SYMBOL(skb_dump);* * Report xmit error if a device callback is tracking this skb. * skb must be freed afterwards. +* +* Does nothing for a cloned skb: the zerocopy state lives in +* skb_shinfo(), which the clones share. */ void skb_tx_error (struct sk_buff *skb) { -skb_zcopy_clear (skb, true); +if (skb && !skb_cloned (skb)) +skb_zcopy_clear (skb, true); }EXPORT_SYMBOL (skb_tx_error);
Signature · 1 line
2.55.0
Re: [PATCH 5.10.y] net: skbuff: don't touch shared zerocopy state in skb_tx_error()
Quoted 5 lines
skb_tx_error()completes the zerocopy uarg and clearsSKBFL_ALL_ZEROCOPY, andskb_zcopy_downgrade_managed()clearsSKBFL_MANAGED_FRAG_REFS. Both live inskb_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
Queued for 5.10, thanks.
Signature · 2 lines
Thanks, Sasha