* FAILED: patch "[PATCH] rxrpc: Also unshare DATA/RESPONSE packets when paged frags" failed to apply to 6.12-stable tree
@ 2026-05-11 6:02 gregkh
2026-05-11 7:18 ` [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets Wentao Guan
0 siblings, 1 reply; 16+ messages in thread
From: gregkh @ 2026-05-11 6:02 UTC (permalink / raw)
To: imv4bel, dhowells, jiayuan.chen, torvalds; +Cc: stable
The patch below does not apply to the 6.12-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 <stable@vger.kernel.org>.
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-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<stable@vger.kernel.org>' --in-reply-to '2026051109-ocelot-dwindle-a7e9@gregkh' --subject-prefix 'PATCH 6.12.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71 Mon Sep 17 00:00:00 2001
From: Hyunwoo Kim <imv4bel@gmail.com>
Date: Fri, 8 May 2026 17:53:09 +0900
Subject: [PATCH] rxrpc: Also unshare DATA/RESPONSE packets when paged frags
are present
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>
diff --git a/net/rxrpc/call_event.c b/net/rxrpc/call_event.c
index fdd683261226..2b19b252225e 100644
--- a/net/rxrpc/call_event.c
+++ b/net/rxrpc/call_event.c
@@ -334,7 +334,9 @@ bool rxrpc_input_call_event(struct rxrpc_call *call)
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 by in-place decryption.
*/
diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c
index a2130d25aaa9..442414d90ba1 100644
--- a/net/rxrpc/conn_event.c
+++ b/net/rxrpc/conn_event.c
@@ -245,7 +245,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.
*/
^ permalink raw reply related [flat|nested] 16+ messages in thread* [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 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 ` 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:28 ` Greg KH 0 siblings, 2 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-11 7:18 UTC (permalink / raw) To: gregkh Cc: dhowells, imv4bel, jiayuan.chen, stable, torvalds, Marc Dionne, Jeffrey Altman, Simon Horman, linux-afs, stable, Jakub Kicinski, Wentao Guan From: David Howells <dhowells@redhat.com> The security operations that verify the RESPONSE packets decrypt bits of it in place - however, the sk_buff may be shared with a packet sniffer, which would lead to the sniffer seeing an apparently corrupt packet (actually decrypted). Fix this by handing a copy of the packet off to the specific security handler if the packet was cloned. Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both") Closes: https://sashiko.dev/#/patchset/20260408121252.2249051-1-dhowells%40redhat.com Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: Jeffrey Altman <jaltman@auristor.com> cc: Simon Horman <horms@kernel.org> cc: linux-afs@lists.infradead.org cc: stable@kernel.org Link: https://patch.msgid.link/20260422161438.2593376-5-dhowells@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> (cherry picked from commit 24481a7f573305706054c59e275371f8d0fe919f) Stable-dep-of: aa54b1d27fe0 ("rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present") Signed-off-by: Wentao Guan <guanwentao@uniontech.com> --- net/rxrpc/conn_event.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c index 82cc72123c9c9..6dcfaed1f7485 100644 --- a/net/rxrpc/conn_event.c +++ b/net/rxrpc/conn_event.c @@ -226,6 +226,33 @@ static void rxrpc_call_is_secure(struct rxrpc_call *call) rxrpc_notify_socket(call); } +static int rxrpc_verify_response(struct rxrpc_connection *conn, + struct sk_buff *skb) +{ + int ret; + + if (skb_cloned(skb)) { + /* Copy the packet if shared so that we can do in-place + * decryption. + */ + struct sk_buff *nskb = skb_copy(skb, GFP_NOFS); + + if (nskb) { + rxrpc_new_skb(nskb, rxrpc_skb_new_unshared); + ret = conn->security->verify_response(conn, nskb); + rxrpc_free_skb(nskb, rxrpc_skb_put_response_copy); + } else { + /* OOM - Drop the packet. */ + rxrpc_see_skb(skb, rxrpc_skb_see_unshare_nomem); + ret = -ENOMEM; + } + } else { + ret = conn->security->verify_response(conn, skb); + } + + return ret; +} + /* * connection-level Rx packet processor */ @@ -253,7 +280,7 @@ static int rxrpc_process_event(struct rxrpc_connection *conn, } spin_unlock(&conn->state_lock); - ret = conn->security->verify_response(conn, skb); + ret = rxrpc_verify_response(conn, skb); if (ret < 0) return ret; -- 2.30.2 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present 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 ` 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 ` (2 more replies) 2026-05-11 7:28 ` Greg KH 1 sibling, 3 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-11 7:18 UTC (permalink / raw) To: gregkh; +Cc: dhowells, imv4bel, jiayuan.chen, stable, torvalds, Wentao Guan 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 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 6.12 v2 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 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 ` Wentao Guan 2026-05-11 7:28 ` [PATCH 6.12 v2 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present Wentao Guan 2026-05-11 7:28 ` [PATCH " Greg KH 2 siblings, 0 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-11 7:27 UTC (permalink / raw) To: guanwentao Cc: dhowells, gregkh, imv4bel, jiayuan.chen, stable, torvalds, Marc Dionne, Jeffrey Altman, Simon Horman, linux-afs, stable, Jakub Kicinski From: David Howells <dhowells@redhat.com> The security operations that verify the RESPONSE packets decrypt bits of it in place - however, the sk_buff may be shared with a packet sniffer, which would lead to the sniffer seeing an apparently corrupt packet (actually decrypted). Fix this by handing a copy of the packet off to the specific security handler if the packet was cloned. Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both") Closes: https://sashiko.dev/#/patchset/20260408121252.2249051-1-dhowells%40redhat.com Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: Jeffrey Altman <jaltman@auristor.com> cc: Simon Horman <horms@kernel.org> cc: linux-afs@lists.infradead.org cc: stable@kernel.org Link: https://patch.msgid.link/20260422161438.2593376-5-dhowells@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> (cherry picked from commit 24481a7f573305706054c59e275371f8d0fe919f) [Readd rxrpc_skb_put_response_copy which missed in 016725807ce3 in v6.12.86] Stable-dep-of: aa54b1d27fe0 ("rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present") Signed-off-by: Wentao Guan <guanwentao@uniontech.com> --- include/trace/events/rxrpc.h | 1 + net/rxrpc/conn_event.c | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h index 9377acad0c5f9..e42ead95362ae 100644 --- a/include/trace/events/rxrpc.h +++ b/include/trace/events/rxrpc.h @@ -146,6 +146,7 @@ EM(rxrpc_skb_put_jumbo_subpacket, "PUT jumbo-sub") \ EM(rxrpc_skb_put_last_nack, "PUT last-nack") \ EM(rxrpc_skb_put_purge, "PUT purge ") \ + EM(rxrpc_skb_put_response, "PUT resp-cpy ") \ EM(rxrpc_skb_put_rotate, "PUT rotate ") \ EM(rxrpc_skb_put_unknown, "PUT unknown ") \ EM(rxrpc_skb_see_conn_work, "SEE conn-work") \ diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c index 82cc72123c9c9..6dcfaed1f7485 100644 --- a/net/rxrpc/conn_event.c +++ b/net/rxrpc/conn_event.c @@ -226,6 +226,33 @@ static void rxrpc_call_is_secure(struct rxrpc_call *call) rxrpc_notify_socket(call); } +static int rxrpc_verify_response(struct rxrpc_connection *conn, + struct sk_buff *skb) +{ + int ret; + + if (skb_cloned(skb)) { + /* Copy the packet if shared so that we can do in-place + * decryption. + */ + struct sk_buff *nskb = skb_copy(skb, GFP_NOFS); + + if (nskb) { + rxrpc_new_skb(nskb, rxrpc_skb_new_unshared); + ret = conn->security->verify_response(conn, nskb); + rxrpc_free_skb(nskb, rxrpc_skb_put_response_copy); + } else { + /* OOM - Drop the packet. */ + rxrpc_see_skb(skb, rxrpc_skb_see_unshare_nomem); + ret = -ENOMEM; + } + } else { + ret = conn->security->verify_response(conn, skb); + } + + return ret; +} + /* * connection-level Rx packet processor */ @@ -253,7 +280,7 @@ static int rxrpc_process_event(struct rxrpc_connection *conn, } spin_unlock(&conn->state_lock); - ret = conn->security->verify_response(conn, skb); + ret = rxrpc_verify_response(conn, skb); if (ret < 0) return ret; -- 2.30.2 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 6.12 v2 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present 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 2026-05-11 7:28 ` [PATCH " Greg KH 2 siblings, 0 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-11 7:28 UTC (permalink / raw) To: guanwentao; +Cc: dhowells, gregkh, imv4bel, jiayuan.chen, stable, torvalds 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 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present 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 ` [PATCH 6.12 v2 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present Wentao Guan @ 2026-05-11 7:28 ` Greg KH 2026-05-11 7:33 ` Re: [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets Wentao Guan 2 siblings, 1 reply; 16+ messages in thread From: Greg KH @ 2026-05-11 7:28 UTC (permalink / raw) To: Wentao Guan; +Cc: dhowells, imv4bel, jiayuan.chen, stable, torvalds On Mon, May 11, 2026 at 03:18:33PM +0800, Wentao Guan wrote: > 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(-) Same here, what branches is this for? thanks, greg k-h ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Re: [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 2026-05-11 7:28 ` [PATCH " Greg KH @ 2026-05-11 7:33 ` Wentao Guan 2026-05-11 7:39 ` Greg KH 0 siblings, 1 reply; 16+ messages in thread From: Wentao Guan @ 2026-05-11 7:33 UTC (permalink / raw) To: gregkh; +Cc: dhowells, guanwentao, imv4bel, jiayuan.chen, stable, torvalds Sorry, it is for 6.12. But miss fixes in https://lore.kernel.org/stable/20260508083142.1752208-1-guanwentao@uniontech.com/, will cause build failed with no rxrpc_skb_put_response_copy, which introduced in 1f2740150f904bfa60e4bad74d65add3ccb5e7f8. BRs Wentao Guan ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Re: [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 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 ` (2 more replies) 0 siblings, 3 replies; 16+ messages in thread From: Greg KH @ 2026-05-11 7:39 UTC (permalink / raw) To: Wentao Guan; +Cc: dhowells, imv4bel, jiayuan.chen, stable, torvalds On Mon, May 11, 2026 at 03:33:51PM +0800, Wentao Guan wrote: > Sorry, it is for 6.12. What is? > But miss fixes in https://lore.kernel.org/stable/20260508083142.1752208-1-guanwentao@uniontech.com/, > will cause build failed with no rxrpc_skb_put_response_copy, > which introduced in 1f2740150f904bfa60e4bad74d65add3ccb5e7f8. I am sorry, but I do not understand what you are asking for here. confused, greg k-h ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 6.12.y v3 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 2026-05-11 7:39 ` Greg KH @ 2026-05-11 7:41 ` Wentao Guan 2026-05-11 8:03 ` Harshit Mogalapalli 2026-05-12 0:17 ` Sasha Levin 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 2 siblings, 2 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-11 7:41 UTC (permalink / raw) To: gregkh Cc: dhowells, guanwentao, imv4bel, jiayuan.chen, stable, torvalds, Marc Dionne, Jeffrey Altman, Simon Horman, linux-afs, stable, Jakub Kicinski From: David Howells <dhowells@redhat.com> The security operations that verify the RESPONSE packets decrypt bits of it in place - however, the sk_buff may be shared with a packet sniffer, which would lead to the sniffer seeing an apparently corrupt packet (actually decrypted). Fix this by handing a copy of the packet off to the specific security handler if the packet was cloned. Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both") Closes: https://sashiko.dev/#/patchset/20260408121252.2249051-1-dhowells%40redhat.com Signed-off-by: David Howells <dhowells@redhat.com> cc: Marc Dionne <marc.dionne@auristor.com> cc: Jeffrey Altman <jaltman@auristor.com> cc: Simon Horman <horms@kernel.org> cc: linux-afs@lists.infradead.org cc: stable@kernel.org Link: https://patch.msgid.link/20260422161438.2593376-5-dhowells@redhat.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> (cherry picked from commit 24481a7f573305706054c59e275371f8d0fe919f) [Readd rxrpc_skb_put_response_copy which missed in 016725807ce3 in v6.12.86] Stable-dep-of: aa54b1d27fe0 ("rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present") Signed-off-by: Wentao Guan <guanwentao@uniontech.com> --- include/trace/events/rxrpc.h | 1 + net/rxrpc/conn_event.c | 29 ++++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h index 9377acad0c5f9..63efc9e4e4102 100644 --- a/include/trace/events/rxrpc.h +++ b/include/trace/events/rxrpc.h @@ -146,6 +146,7 @@ EM(rxrpc_skb_put_jumbo_subpacket, "PUT jumbo-sub") \ EM(rxrpc_skb_put_last_nack, "PUT last-nack") \ EM(rxrpc_skb_put_purge, "PUT purge ") \ + EM(rxrpc_skb_put_response_copy, "PUT resp-cpy ") \ EM(rxrpc_skb_put_rotate, "PUT rotate ") \ EM(rxrpc_skb_put_unknown, "PUT unknown ") \ EM(rxrpc_skb_see_conn_work, "SEE conn-work") \ diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c index 82cc72123c9c9..6dcfaed1f7485 100644 --- a/net/rxrpc/conn_event.c +++ b/net/rxrpc/conn_event.c @@ -226,6 +226,33 @@ static void rxrpc_call_is_secure(struct rxrpc_call *call) rxrpc_notify_socket(call); } +static int rxrpc_verify_response(struct rxrpc_connection *conn, + struct sk_buff *skb) +{ + int ret; + + if (skb_cloned(skb)) { + /* Copy the packet if shared so that we can do in-place + * decryption. + */ + struct sk_buff *nskb = skb_copy(skb, GFP_NOFS); + + if (nskb) { + rxrpc_new_skb(nskb, rxrpc_skb_new_unshared); + ret = conn->security->verify_response(conn, nskb); + rxrpc_free_skb(nskb, rxrpc_skb_put_response_copy); + } else { + /* OOM - Drop the packet. */ + rxrpc_see_skb(skb, rxrpc_skb_see_unshare_nomem); + ret = -ENOMEM; + } + } else { + ret = conn->security->verify_response(conn, skb); + } + + return ret; +} + /* * connection-level Rx packet processor */ @@ -253,7 +280,7 @@ static int rxrpc_process_event(struct rxrpc_connection *conn, } spin_unlock(&conn->state_lock); - ret = conn->security->verify_response(conn, skb); + ret = rxrpc_verify_response(conn, skb); if (ret < 0) return ret; -- 2.30.2 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 6.12.y v3 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 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 1 sibling, 1 reply; 16+ messages in thread From: Harshit Mogalapalli @ 2026-05-11 8:03 UTC (permalink / raw) To: Wentao Guan, gregkh Cc: dhowells, imv4bel, jiayuan.chen, stable, torvalds, Marc Dionne, Jeffrey Altman, Simon Horman, linux-afs, stable, Jakub Kicinski Hi, On 11/05/26 13:11, Wentao Guan wrote: > [Readd rxrpc_skb_put_response_copy which missed in 016725807ce3 in v6.12.86] > Stable-dep-of: aa54b1d27fe0 ("rxrpc: Also unshare DATA/RESPONSE packets when > paged frags are present") Yes, I noticed this too. But you got the commit wrong I think: (you probably meant) the rxrpc_skb_put_response_copy() addition was missed in commit: bf20f46d94f1 ("rxrpc: Fix potential UAF after skb_unshare() failure") Greg: Summary: (it might help) The stable backport bf20f46d94f1 ("rxrpc: Fix potential UAF after skb_unshare() failure") is a backport of commit: 1f2740150f90 ("rxrpc: Fix potential UAF after skb_unshare() failure") to 6.12.y: stable backport bf20f46d94f1 ("rxrpc: Fix potential UAF after skb_unshare() failure") adds this which is not part of upstream commit: + EM(rxrpc_skb_get_call_rx, "GET call-rx ") \ But missed adding: which is added in upstream commit: + EM(rxrpc_skb_put_response_copy, "PUT resp-cpy ") \ Hence Wentao needs to add rxrpc_skb_put_response_copy() in this backport. Thanks, Harshit > Signed-off-by: Wentao Guan<guanwentao@uniontech.com> > --- > include/trace/events/rxrpc.h | 1 + > net/rxrpc/conn_event.c | 29 ++++++++++++++++++++++++++++- > 2 files changed, 29 insertions(+), 1 deletion(-) > > diff --git a/include/trace/events/rxrpc.h b/include/trace/events/rxrpc.h > index 9377acad0c5f9..63efc9e4e4102 100644 > --- a/include/trace/events/rxrpc.h > +++ b/include/trace/events/rxrpc.h > @@ -146,6 +146,7 @@ > EM(rxrpc_skb_put_jumbo_subpacket, "PUT jumbo-sub") \ > EM(rxrpc_skb_put_last_nack, "PUT last-nack") \ > EM(rxrpc_skb_put_purge, "PUT purge ") \ > + EM(rxrpc_skb_put_response_copy, "PUT resp-cpy ") \ > EM(rxrpc_skb_put_rotate, "PUT rotate ") \ > EM(rxrpc_skb_put_unknown, "PUT unknown ") \ > EM(rxrpc_skb_see_conn_work, "SEE conn-work") \ > diff --git a/net/rxrpc/conn_event.c b/net/rxrpc/conn_event.c > index 82cc72123c9c9..6dcfaed1f7485 100644 > --- a/net/rxrpc/conn_event.c > +++ b/net/rxrpc/conn_event.c > @@ -226,6 +226,33 @@ static void rxrpc_call_is_secure(struct rxrpc_call *call) > rxrpc_notify_socket(call); > } ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Re: [PATCH 6.12.y v3 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 2026-05-11 8:03 ` Harshit Mogalapalli @ 2026-05-11 8:16 ` Wentao Guan 0 siblings, 0 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-11 8:16 UTC (permalink / raw) To: harshit.m.mogalapalli Cc: dhowells, gregkh, guanwentao, horms, imv4bel, jaltman, jiayuan.chen, kuba, linux-afs, marc.dionne, stable, stable, torvalds > On 11/05/26 13:11, Wentao Guan wrote: > > [Readd rxrpc_skb_put_response_copy which missed in 016725807ce3 in v6.12.86] > > Stable-dep-of: aa54b1d27fe0 ("rxrpc: Also unshare DATA/RESPONSE packets when > > paged frags are present") > Yes, I noticed this too. Well > But you got the commit wrong I think: (you probably meant) Thanks, i paste wrong commit here, which i reported in https://lore.kernel.org/stable/20260508083142.1752208-1-guanwentao@uniontech.com/ SUMMARY: commit ("rxrpc: Fix potential UAF after skb_unshare() failure"): bf20f46d94f1db38e6ffc0ca204a5fe0de01b495 v6.12 1f2740150f904bfa60e4bad74d65add3ccb5e7f8 upstream is different > Hence Wentao needs to add rxrpc_skb_put_response_copy() in this backport. Yeah. BRs Wentao Guan ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 6.12.y v3 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 2026-05-11 7:41 ` [PATCH 6.12.y v3 " Wentao Guan 2026-05-11 8:03 ` Harshit Mogalapalli @ 2026-05-12 0:17 ` Sasha Levin 2026-05-12 2:04 ` Wentao Guan 1 sibling, 1 reply; 16+ messages in thread From: Sasha Levin @ 2026-05-12 0:17 UTC (permalink / raw) To: gregkh Cc: Sasha Levin, dhowells, guanwentao, imv4bel, jiayuan.chen, stable, torvalds, Marc Dionne, Jeffrey Altman, Simon Horman, linux-afs, stable, Jakub Kicinski, Harshit Mogalapalli On Mon, May 11, 2026 at 03:41:04PM +0800, Wentao Guan wrote: > (cherry picked from commit 24481a7f573305706054c59e275371f8d0fe919f) > [Readd rxrpc_skb_put_response_copy which missed in 016725807ce3 in v6.12.86] > Stable-dep-of: aa54b1d27fe0 ("rxrpc: Also unshare DATA/RESPONSE packets when > paged frags are present") Queued for 6.12 (both 1/2 and 2/2), thanks. I fixed up the bracket annotation at apply time per Harshit's review: the trace event was actually dropped in bf20f46d94f1 ("rxrpc: Fix potential UAF after skb_unshare() failure"), not 016725807ce3, so the queued changelog references bf20f46d94f1. -- Thanks, Sasha ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Re: [PATCH 6.12.y v3 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 2026-05-12 0:17 ` Sasha Levin @ 2026-05-12 2:04 ` Wentao Guan 0 siblings, 0 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-12 2:04 UTC (permalink / raw) To: sashal Cc: dhowells, gregkh, guanwentao, harshit.m.mogalapalli, horms, imv4bel, jaltman, jiayuan.chen, kuba, linux-afs, marc.dionne, stable, stable, torvalds > Queued for 6.12 (both 1/2 and 2/2), thanks. > I fixed up the bracket annotation at apply time per Harshit's review: > the trace event was actually dropped in bf20f46d94f1 ("rxrpc: Fix > potential UAF after skb_unshare() failure"), not 016725807ce3, so the > queued changelog references bf20f46d94f1. Thanks. BRs Wentao Guan ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH 6.12.y v3 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present 2026-05-11 7:39 ` Greg KH 2026-05-11 7:41 ` [PATCH 6.12.y v3 " Wentao Guan @ 2026-05-11 7:41 ` Wentao Guan 2026-05-11 7:43 ` [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets Wentao Guan 2 siblings, 0 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-11 7:41 UTC (permalink / raw) To: gregkh; +Cc: dhowells, guanwentao, imv4bel, jiayuan.chen, stable, torvalds 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 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 2026-05-11 7:39 ` Greg KH 2026-05-11 7:41 ` [PATCH 6.12.y v3 " 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 ` Wentao Guan 2 siblings, 0 replies; 16+ messages in thread From: Wentao Guan @ 2026-05-11 7:43 UTC (permalink / raw) To: gregkh; +Cc: dhowells, guanwentao, imv4bel, jiayuan.chen, stable, torvalds Sorry, FYI ,it is only for 6.12.y, PATCH v1 which i sent will cause build failed with no rxrpc_skb_put_response_copy, and v2 also broken, which introduced in 1f2740150f904bfa60e4bad74d65add3ccb5e7f8. BRs Wentao Guan ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH 1/2] rxrpc: Fix conn-level packet handling to unshare RESPONSE packets 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:28 ` Greg KH 1 sibling, 0 replies; 16+ messages in thread From: Greg KH @ 2026-05-11 7:28 UTC (permalink / raw) To: Wentao Guan Cc: dhowells, imv4bel, jiayuan.chen, stable, torvalds, Marc Dionne, Jeffrey Altman, Simon Horman, linux-afs, stable, Jakub Kicinski On Mon, May 11, 2026 at 03:18:32PM +0800, Wentao Guan wrote: > From: David Howells <dhowells@redhat.com> > > The security operations that verify the RESPONSE packets decrypt bits of it > in place - however, the sk_buff may be shared with a packet sniffer, which > would lead to the sniffer seeing an apparently corrupt packet (actually > decrypted). > > Fix this by handing a copy of the packet off to the specific security > handler if the packet was cloned. > > Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both") > Closes: https://sashiko.dev/#/patchset/20260408121252.2249051-1-dhowells%40redhat.com > Signed-off-by: David Howells <dhowells@redhat.com> > cc: Marc Dionne <marc.dionne@auristor.com> > cc: Jeffrey Altman <jaltman@auristor.com> > cc: Simon Horman <horms@kernel.org> > cc: linux-afs@lists.infradead.org > cc: stable@kernel.org > Link: https://patch.msgid.link/20260422161438.2593376-5-dhowells@redhat.com > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > (cherry picked from commit 24481a7f573305706054c59e275371f8d0fe919f) > Stable-dep-of: aa54b1d27fe0 ("rxrpc: Also unshare DATA/RESPONSE packets when > paged frags are present") > Signed-off-by: Wentao Guan <guanwentao@uniontech.com> > --- > net/rxrpc/conn_event.c | 29 ++++++++++++++++++++++++++++- > 1 file changed, 28 insertions(+), 1 deletion(-) What branch(es) are you wanting this applied to? thanks, greg k-h ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2026-05-12 2:06 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 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 ` [PATCH 6.12 v2 2/2] rxrpc: Also unshare DATA/RESPONSE packets when paged frags are present Wentao Guan 2026-05-11 7:28 ` [PATCH " 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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox