All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Jarkko Sakkinen" <jarkko@kernel.org>,
	"David Howells" <dhowells@redhat.com>
Cc: keyrings@vger.kernel.org, linux-s390@vger.kernel.org,
	linux-security-module@vger.kernel.org,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	"Anna Schumaker" <anna@kernel.org>,
	"Bharath SM" <bharathsm@microsoft.com>,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>,
	"David S. Miller" <davem@davemloft.net>,
	"Eric Biggers" <ebiggers@kernel.org>,
	"Eric Dumazet" <edumazet@kernel.org>,
	"Heiko Carstens" <hca@linux.ibm.com>,
	"Jakub Kicinski" <kuba@kernel.org>,
	"James Bottomley" <James.Bottomley@HansenPartnership.com>,
	"James Morris" <jmorris@namei.org>,
	"Marc Dionne" <marc.dionne@auristor.com>,
	"Mimi Zohar" <zohar@linux.ibm.com>,
	"Namjae Jeon" <linkinjeon@kernel.org>,
	"Paolo Abeni" <pabeni@redhat.com>,
	"Paul Moore" <paul@paul-moore.com>,
	"Paulo Alcantara" <pc@manguebit.org>,
	"Ronnie Sahlberg" <ronniesahlberg@gmail.com>,
	"Serge E. Hallyn" <serge@hallyn.com>,
	"Shyam Prasad N" <sprasad@microsoft.com>,
	"Simon Horman" <horms@kernel.org>,
	"Sumit Garg" <sumit.garg@kernel.org>,
	"Sven Schnelle" <svens@linux.ibm.com>,
	"Tom Talpey" <tom@talpey.com>,
	"Trond Myklebust" <trondmy@kernel.org>,
	"Vasily Gorbik" <gor@linux.ibm.com>,
	"Chuck Lever" <cel@kernel.org>,
	"Jeff Layton" <jlayton@kernel.org>
Subject: Re: [PATCH v4 08/11] rxrpc: Move key types to their own module
Date: Sun, 08 Nov 2026 13:16:22 +0000	[thread overview]
Message-ID: <sashiko-outbox-203767@kernel.org> (raw)
In-Reply-To: <20261107131512.3603168-9-jarkko@kernel.org>

Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Low] rxrpc: update kernel-doc path from server_key.c to security.c in
  rxrpc.rst
It also noticed 1 related pre-existing issue this patch does not
introduce:
- [High] rxrpc: memory leak of conn->key in rxrpc_process_event() [1]
--

commit 16a0f09dc6df360865624dc81f7bfb1b9505bec6
Author: Jarkko Sakkinen <jarkko@kernel.org>

rxrpc: Move key types to their own module

This commit splits the rxrpc and rxrpc_s key types and their preparse
logic into a separate rxrpc_keys.ko module and moves socket and
connection key helper functions into net/rxrpc/security.c so rxrpc.ko
can be unloaded while persistent keys remain in keyrings.

> diff --git a/net/rxrpc/security.c b/net/rxrpc/security.c
> index 2bfbf2b2bb37a..28883a70c9e85 100644
> --- a/net/rxrpc/security.c
> +++ b/net/rxrpc/security.c

[ ... ]

> +/*
> + * generate a server data key
> + */
> +int rxrpc_get_server_data_key(struct rxrpc_connection *conn,
> +			      const void *session_key,
> +			      time64_t expiry,
> +			      u32 kvno)
> +{
> +	const struct cred *cred = current_cred();
> +	struct {
> +		u32 kver;
> +		struct rxrpc_key_data_v1 v1;
> +	} data;
> +	struct key *key;
> +	int ret;
> +
> +	_enter("");
> +
> +	key = key_alloc(&key_type_rxrpc, "x",
> +			GLOBAL_ROOT_UID, GLOBAL_ROOT_GID, cred, 0,
> +			KEY_ALLOC_NOT_IN_QUOTA, NULL);
> +	if (IS_ERR(key)) {
> +		_leave(" = -ENOMEM [alloc %ld]", PTR_ERR(key));
> +		return -ENOMEM;
> +	}
> +
> +	_debug("key %d", key_serial(key));
> +
> +	data.kver = 1;
> +	data.v1.security_index = RXRPC_SECURITY_RXKAD;
> +	data.v1.ticket_length = 0;
> +	data.v1.expiry = rxrpc_time64_to_u32(expiry);
> +	data.v1.kvno = 0;
> +
> +	memcpy(&data.v1.session_key, session_key, sizeof(data.v1.session_key));
> +
> +	ret = key_instantiate_and_link(key, &data, sizeof(data), NULL, NULL);
> +	if (ret < 0)
> +		goto error;
> +
> +	conn->key = key;

[Severity: High]
This problem wasn't introduced by this patch, but can assigning conn->key
here leak an existing key [1] if a RESPONSE packet is replayed?

In rxrpc_process_event(), if rxrpc_verify_response() succeeds (allocating
and assigning conn->key via rxrpc_get_server_data_key()) but the subsequent
conn->security->init_connection_security() call fails, the function returns
early while conn->state remains RXRPC_CONN_SERVICE_CHALLENGING:

net/rxrpc/conn_event.c:rxrpc_process_event() {
    ...
	case RXRPC_PACKET_TYPE_RESPONSE:
		spin_lock_irq(&conn->state_lock);
		if (conn->state != RXRPC_CONN_SERVICE_CHALLENGING) {
			spin_unlock_irq(&conn->state_lock);
			return 0;
		}
		spin_unlock_irq(&conn->state_lock);

		ret = rxrpc_verify_response(conn, skb);
		if (ret < 0)
			return ret;

		ret = conn->security->init_connection_security(
			conn, conn->key->payload.data[0]);
		if (ret < 0)
			return ret;
    ...
}

A replayed RESPONSE packet will then run rxrpc_verify_response() again and
overwrite conn->key without calling key_put() on the previous key.

[ ... ]

> +/**
> + * rxrpc_sock_set_security_keyring - Set the security keyring for a kernel service
> + * @sk: The socket to set the keyring on
> + * @keyring: The keyring to set
> + *
> + * Set the server security keyring on an rxrpc socket.  This is used to provide
> + * the encryption keys for a kernel service.
> + *
> + * Return: %0 if successful and a negative error code otherwise.
> + */
> +int rxrpc_sock_set_security_keyring(struct sock *sk, struct key *keyring)
> +{

[ ... ]

> +/**
> + * rxrpc_sock_set_manage_response - Set the manage-response flag for a kernel service

[Severity: Low]
Moving rxrpc_sock_set_security_keyring() and rxrpc_sock_set_manage_response()
from net/rxrpc/server_key.c to net/rxrpc/security.c leaves no kernel-doc
comments in net/rxrpc/server_key.c, while Documentation/networking/rxrpc.rst
still has:

  .. kernel-doc:: net/rxrpc/server_key.c
     :internal:

Should that directive in Documentation/networking/rxrpc.rst be updated to
reference net/rxrpc/security.c so these functions remain in the generated API
documentation?

[1] https://sashiko.dev/#/bug/linux-93795e42-6eae-42ec-9f00-b78f9b947f35

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261107131512.3603168-1-jarkko@kernel.org?part=8

  reply	other threads:[~2026-11-08 13:16 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-07 13:15 [PATCH v4 00/11] KEYS: Sanitize the garbage collector Jarkko Sakkinen
2026-11-07 13:15 ` [PATCH v4 01/11] KEYS: Add key_gc_flush() for draining RCU callbacks Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-07 13:15 ` [PATCH v4 02/11] dns_resolver: Move the key type into a separate module Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-07 13:15 ` [PATCH v4 03/11] NFSv4: Clear idmap keyring cache when the last client unloads Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-07 13:15 ` [PATCH v4 04/11] smb: client: Clear idmap/SPNEGO caches when the last session is unloaded Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-07 13:15 ` [PATCH v4 05/11] s390/cert_store: Start tracking subsystem keys Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-07 13:15 ` [PATCH v4 06/11] KEYS: trusted: TEE: Disable sysfs bind attributes Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-07 13:15 ` [PATCH v4 07/11] KEYS: trusted: TEE: Synchronize session lifetime Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-07 13:15 ` [PATCH v4 08/11] rxrpc: Move key types to their own module Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot [this message]
2026-11-07 13:15 ` [PATCH v4 09/11] KEYS: Pin the backing kernel module for a key type Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-07 13:15 ` [PATCH v4 10/11] KEYS: Remove key_type_dead Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot
2026-11-08 13:36     ` Jarkko Sakkinen
2026-11-07 13:15 ` [PATCH v4 11/11] KEYS: key_garbage_collector(): process in chunks Jarkko Sakkinen
2026-11-08 13:16   ` sashiko-bot

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=sashiko-outbox-203767@kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=agordeev@linux.ibm.com \
    --cc=anna@kernel.org \
    --cc=bharathsm@microsoft.com \
    --cc=borntraeger@linux.ibm.com \
    --cc=cel@kernel.org \
    --cc=davem@davemloft.net \
    --cc=dhowells@redhat.com \
    --cc=ebiggers@kernel.org \
    --cc=edumazet@kernel.org \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=horms@kernel.org \
    --cc=jarkko@kernel.org \
    --cc=jlayton@kernel.org \
    --cc=jmorris@namei.org \
    --cc=keyrings@vger.kernel.org \
    --cc=kuba@kernel.org \
    --cc=linkinjeon@kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=marc.dionne@auristor.com \
    --cc=pabeni@redhat.com \
    --cc=paul@paul-moore.com \
    --cc=pc@manguebit.org \
    --cc=ronniesahlberg@gmail.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=serge@hallyn.com \
    --cc=sprasad@microsoft.com \
    --cc=sumit.garg@kernel.org \
    --cc=svens@linux.ibm.com \
    --cc=tom@talpey.com \
    --cc=trondmy@kernel.org \
    --cc=zohar@linux.ibm.com \
    /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.