From: Simon Horman <horms@kernel.org>
To: dhowells@redhat.com
Cc: Simon Horman <horms@kernel.org>,
netdev@vger.kernel.org, marc.dionne@auristor.com,
kuba@kernel.org, davem@davemloft.net, edumazet@google.com,
pabeni@redhat.com, linux-afs@lists.infradead.org,
linux-kernel@vger.kernel.org, stable@kernel.org
Subject: Re: [PATCH net v3 12/14] rxrpc: Pass appdata key to rxrpc_call and thence to rxrpc_bundle
Date: Mon, 20 Jul 2026 15:54:08 +0100 [thread overview]
Message-ID: <20260720145408.195916-1-horms@kernel.org> (raw)
In-Reply-To: <20260713081022.2186481-13-dhowells@redhat.com>
This is an AI-generated review of your patch. The human sending this
email has considered the AI review valid, or at least plausible.
https://sashiko.dev/#/patchset/20260713081022.2186481-8-dhowells@redhat.com?part=12
---
--- Patch [12]: [PATCH net v3 12/14] rxrpc: Pass appdata key to rxrpc_call and thence to rxrpc_bundle ---
commit 6a78aabb95a0cb45b9da0216dba46c2925209a22
Author: David Howells <dhowells@redhat.com>
rxrpc: Pass appdata key to rxrpc_call and thence to rxrpc_bundle
Currently, when a CHALLENGE packet comes in, it's queued in an OOB queue on
the AF_RXRPC socket that generated one of the calls on that connection for
the application (which might be in userspace) to service. The application
then picks up the CHALLENGE and requests a RESPONSE packet be generated,
allowing the app to include app-specific data in it if appropriate.
Link: https://sashiko.dev/#/patchset/20260624163819.3017002-1-dhowells%40redhat.com
> diff --git a/net/rxrpc/conn_client.c b/net/rxrpc/conn_client.c
> index 48519f0de1853..5cbfa7b223e01 100644
> --- a/net/rxrpc/conn_client.c
> +++ b/net/rxrpc/conn_client.c
> @@ -81,6 +81,7 @@ static struct rxrpc_bundle *rxrpc_alloc_bundle(struct rxrpc_call *call,
> bundle->local = call->local;
> bundle->peer = rxrpc_get_peer(call->peer, rxrpc_peer_get_bundle);
> bundle->key = key_get(call->key);
> + bundle->app_data = key_get(call->app_data);
[Severity: Medium]
Will this bundle lookup logic reuse stale app_data keys for new calls?
When rxrpc_look_up_bundle() compares connection parameters, it does not seem
to check bundle->app_data.
If a new call provides a different app_data key but otherwise identical
parameters, won't it match an existing bundle and inherit the previous call's
stale app_data instead of establishing a new connection bundle for the new
data?
> bundle->security = call->security;
> bundle->exclusive = test_bit(RXRPC_CALL_EXCLUSIVE, &call->flags);
> bundle->upgrade = test_bit(RXRPC_CALL_UPGRADE, &call->flags);
[ ... ]
> diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c
> index 71343998b87d1..cdf35440317d6 100644
> --- a/net/rxrpc/sendmsg.c
> +++ b/net/rxrpc/sendmsg.c
> @@ -614,6 +617,22 @@ static int rxrpc_sendmsg_cmsg(struct msghdr *msg, struct rxrpc_send_params *p)
> return -ERANGE;
> break;
>
> + case RXRPC_RESPONSE_APPDATA:
> + if (len != sizeof(key_serial_t))
> + return -EINVAL;
> + if (p->call.app_data)
> + return -EINVAL;
> + key_id = *(key_serial_t *)CMSG_DATA(cmsg);
> + key = lookup_user_key(key_id, 0, KEY_NEED_SEARCH);
> + if (IS_ERR(key))
> + return PTR_ERR(key);
> + if (key_ref_to_ptr(key)->type == &key_type_user) {
> + key_ref_put(key);
> + return -EINVAL;
> + }
[Severity: High]
Does this inverted check reject valid user keys and cause a regression with
memory parsing?
The user API expects a user key here for the RESPONSE app data. However,
if a local user sends an RXRPC_RESPONSE_APPDATA control message via sendmsg
and provides a valid user key, this check rejects it with -EINVAL.
Conversely, it accepts any non-user key.
When the subsystem later attempts to parse this key's payload, won't it assume
the memory layout of a user key payload, leading to out-of-bounds reads or
memory corruption?
> + p->call.app_data = key_ref_to_ptr(key);
> + break;
> +
> default:
> return -EINVAL;
> }
next prev parent reply other threads:[~2026-07-20 14:54 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-13 8:10 [PATCH net v3 00/14] rxrpc: Fix CHALLENGE packet handling David Howells
2026-07-13 8:10 ` [PATCH net v3 01/14] rxrpc: Fix sendmsg to not return an error if last packet queued David Howells
2026-07-13 8:10 ` [PATCH net v3 02/14] afs: Fix UAF when sending a message David Howells
2026-07-13 8:10 ` [PATCH net v3 03/14] afs: Fix afs_fs_fetch_data() to set call->async David Howells
2026-07-13 8:10 ` [PATCH net v3 04/14] rxrpc: Fix packet encryption error handling David Howells
2026-07-20 14:52 ` Simon Horman
2026-07-13 8:10 ` [PATCH net v3 05/14] rxrpc: Fix update of call->tx_pending without holding lock David Howells
2026-07-13 8:10 ` [PATCH net v3 06/14] rxrpc: Fix generation of notifications after call completion David Howells
2026-07-13 8:10 ` [PATCH net v3 07/14] afs: Simplify call refcounting David Howells
2026-07-20 14:52 ` Simon Horman
2026-07-13 8:10 ` [PATCH net v3 08/14] afs: Make afs_put_call() take trace argument David Howells
2026-07-13 8:10 ` [PATCH net v3 09/14] afs: Fix UAF in afs_make_call() David Howells
2026-07-13 8:10 ` [PATCH net v3 10/14] keys: Add refcounting to user-defined key type payload David Howells
2026-07-13 8:10 ` [PATCH net v3 11/14] afs: Create a server appdata key David Howells
2026-07-20 14:53 ` Simon Horman
2026-07-13 8:10 ` [PATCH net v3 12/14] rxrpc: Pass appdata key to rxrpc_call and thence to rxrpc_bundle David Howells
2026-07-20 14:54 ` Simon Horman [this message]
2026-07-13 8:10 ` [PATCH net v3 13/14] rxrpc: Fix CHALLENGE packet overqueuing and simplify RESPONSE generation David Howells
2026-07-20 14:54 ` Simon Horman
2026-07-13 8:10 ` [PATCH net v3 14/14] rxrpc: Remove OOB challenge/response code David Howells
2026-07-20 14:56 ` Simon Horman
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=20260720145408.195916-1-horms@kernel.org \
--to=horms@kernel.org \
--cc=davem@davemloft.net \
--cc=dhowells@redhat.com \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=linux-afs@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.dionne@auristor.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=stable@kernel.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.