[PATCH v5.15.205] ipv4: set SKBFL_SHARED_FRAG in the right skb field

From: Feng zhou

Date: Sat May 09 2026 - 01:39:26 EST


From: Feng Zhou <zhoufeng.zf@xxxxxxxxxxxxx>

commit ab8b995323e5237041472d07e5055f5f7dcdf15b
("xfrm: esp: avoid in-place decrypt on shared skb frags")
backported the shared frag marking to ip_append_page(), but it writes
SKBFL_SHARED_FRAG to skb_shinfo(skb)->tx_flags.

SKBFL_SHARED_FRAG is a skb_shared_info::flags bit, so storing it in
skb_shinfo(skb)->tx_flags does not mark the skb as carrying shared
frags for later consumers.

Set the bit in skb_shinfo(skb)->flags instead. This makes the
backport actually tag spliced UDP pages as shared and restores the
protection intended for the ESP-in-UDP path.

Fixes: ab8b995323e5237041472d07e5055f5f7dcdf15b ("xfrm: esp: avoid in-place decrypt on shared skb frags")
Signed-off-by: Feng Zhou <zhoufeng.zf@xxxxxxxxxxxxx>
---
net/ipv4/ip_output.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 68509e1f89b5b..5d8f8a5901bc6 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -1443,7 +1443,7 @@ ssize_t ip_append_page(struct sock *sk, struct flowi4 *fl4, struct page *page,
goto error;
}

- skb_shinfo(skb)->tx_flags |= SKBFL_SHARED_FRAG;
+ skb_shinfo(skb)->flags |= SKBFL_SHARED_FRAG;

if (skb->ip_summed == CHECKSUM_NONE) {
__wsum csum;
--
2.39.5