From: Wentao Guan <guanwentao@uniontech.com>
To: guanwentao@uniontech.com
Cc: dhowells@redhat.com, gregkh@linuxfoundation.org,
imv4bel@gmail.com, jiayuan.chen@linux.dev,
stable@vger.kernel.org, torvalds@linux-foundation.org
Subject: [PATCH 6.12 v2 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present
Date: Mon, 11 May 2026 15:28:03 +0800 [thread overview]
Message-ID: <20260511072803.55131-1-guanwentao@uniontech.com> (raw)
In-Reply-To: <20260511071833.44144-2-guanwentao@uniontech.com>
From: Hyunwoo Kim <imv4bel@gmail.com>
The DATA-packet handler in rxrpc_input_call_event() and the RESPONSE
handler in rxrpc_verify_response() copy the skb to a linear one before
calling into the security ops only when skb_cloned() is true. An skb
that is not cloned but still carries externally-owned paged fragments
(e.g. SKBFL_SHARED_FRAG set by splice() into a UDP socket via
__ip_append_data, or a chained skb_has_frag_list()) falls through to
the in-place decryption path, which binds the frag pages directly into
the AEAD/skcipher SGL via skb_to_sgvec().
Extend the gate to also unshare when skb_has_frag_list() or
skb_has_shared_frag() is true. This catches the splice-loopback vector
and other externally-shared frag sources while preserving the
zero-copy fast path for skbs whose frags are kernel-private (e.g. NIC
page_pool RX, GRO). The OOM/trace handling already in place is reused.
Fixes: d0d5c0cd1e71 ("rxrpc: Use skb_unshare() rather than skb_cow_data()")
Cc: stable@vger.kernel.org
Signed-off-by: Hyunwoo Kim <imv4bel@gmail.com>
Reviewed-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Acked-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
---
net/rxrpc/call_event.c | 4 +++-
net/rxrpc/conn_event.c | 3 ++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/net/rxrpc/call_event.c b/net/rxrpc/call_event.c
index 62ddaa129ce5a..fda16b39e8e73 100644
--- a/net/rxrpc/call_event.c
+++ b/net/rxrpc/call_event.c
@@ -347,7 +347,9 @@ bool rxrpc_input_call_event(struct rxrpc_call *call, struct sk_buff *skb)
if (sp->hdr.type == RXRPC_PACKET_TYPE_DATA &&
sp->hdr.securityIndex != 0 &&
- skb_cloned(skb)) {
+ (skb_cloned(skb) ||
+ skb_has_frag_list(skb) ||
+ skb_has_shared_frag(skb))) {
/* Unshare the packet so that it can be modified for
* in-place decryption.
*/
diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c
index 6dcfaed1f7485..3a58fb9210383 100644
--- a/net/rxrpc/conn_event.c
+++ b/net/rxrpc/conn_event.c
@@ -231,7 +231,8 @@ static int rxrpc_verify_response(struct rxrpc_connection *conn,
{
int ret;
- if (skb_cloned(skb)) {
+ if (skb_cloned(skb) || skb_has_frag_list(skb) ||
+ skb_has_shared_frag(skb)) {
/* Copy the packet if shared so that we can do in-place
* decryption.
*/
--
2.30.2
next prev parent reply other threads:[~2026-05-11 7:30 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-11 6:02 FAILED: patch "[PATCH] rxrpc: Also unshare DATA/RESPONSE packets when paged frags" failed to apply to 6.12-stable tree gregkh
2026-05-11 7:18 ` [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets Wentao Guan
2026-05-11 7:18 ` [PATCH 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present Wentao Guan
2026-05-11 7:27 ` [PATCH 6.12 v2 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets Wentao Guan
2026-05-11 7:28 ` Wentao Guan [this message]
2026-05-11 7:28 ` [PATCH 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present Greg KH
2026-05-11 7:33 ` Re: [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets Wentao Guan
2026-05-11 7:39 ` Greg KH
2026-05-11 7:41 ` [PATCH 6.12.y v3 " Wentao Guan
2026-05-11 8:03 ` Harshit Mogalapalli
2026-05-11 8:16 ` Wentao Guan
2026-05-12 0:17 ` Sasha Levin
2026-05-12 2:04 ` Wentao Guan
2026-05-11 7:41 ` [PATCH 6.12.y v3 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present Wentao Guan
2026-05-11 7:43 ` [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets Wentao Guan
2026-05-11 7:28 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260511072803.55131-1-guanwentao@uniontech.com \
--to=guanwentao@uniontech.com \
--cc=dhowells@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=imv4bel@gmail.com \
--cc=jiayuan.chen@linux.dev \
--cc=stable@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.