All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jarkko Sakkinen <jarkko.sakkinen@iki.fi>
To: tjdqudcks0424@naver.com
Cc: jarkko@kernel.org, dhowells@redhat.com, keyrings@vger.kernel.org,
	linux-security-module@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] KEYS: Fix add_key() race with keyring restriction
Date: Fri, 2 Oct 2026 06:18:20 +0300	[thread overview]
Message-ID: <ar8ifHy-CQUfxfID@iki.fi> (raw)
In-Reply-To: <20260930041802.6114-1-tjdqudcks0424@naver.com>

On Wed, Sep 30, 2026 at 01:18:01PM +0900, tjdqudcks0424@naver.com wrote:
> From: 성병찬 <tjdqudcks0424@naver.com>
> 
> __key_create_or_update() snapshots keyring->restrict_link before taking
> the destination keyring's semaphore.  keyring_restrict() installs a
> restriction while holding that semaphore.
> 
> This allows a writer to observe no restriction, wait for the keyring
> owner to install a reject-all restriction and return successfully, and
> then link a key using the stale NULL snapshot.  The writer only needs
> write permission on the destination keyring.
> 
> Move the restrict_link read after __key_link_lock() and
> __key_link_begin().  The read and the subsequent restriction check are
> then serialized with restriction installation by keyring->sem.
> 
> The race was reproduced on v7.2.8 in 19 executions where restriction
> installation returned before the link completed.  All 19 linked the key
> despite the reject-all restriction.  With this change, 312 executions
> reached the same ordering and every add_key() call failed with -EPERM.
> 
> The issue was found by manual concurrency analysis assisted by AI-based
> analysis and independently verified with a QEMU reproducer and kernel
> instrumentation.
> 
> Fixes: 5ac7eace2d00 ("KEYS: Add a facility to restrict new links into a keyring")
> Cc: stable@vger.kernel.org
> Signed-off-by: 성병찬 <tjdqudcks0424@naver.com>
> ---
>  security/keys/key.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/security/keys/key.c b/security/keys/key.c
> index b34a64d81d47..a438c4508595 100644
> --- a/security/keys/key.c
> +++ b/security/keys/key.c
> @@ -840,9 +840,6 @@ static key_ref_t __key_create_or_update(key_ref_t keyring_ref,
>  
>  	key_check(keyring);
>  
> -	if (!(flags & KEY_ALLOC_BYPASS_RESTRICTION))
> -		restrict_link = keyring->restrict_link;
> -
>  	key_ref = ERR_PTR(-ENOTDIR);
>  	if (keyring->type != &key_type_keyring)
>  		goto error_put_type;
> @@ -880,6 +877,9 @@ static key_ref_t __key_create_or_update(key_ref_t keyring_ref,
>  		goto error_link_end;
>  	}
>  
> +	if (!(flags & KEY_ALLOC_BYPASS_RESTRICTION))
> +		restrict_link = keyring->restrict_link;
> +
>  	if (restrict_link && restrict_link->check) {
>  		ret = restrict_link->check(keyring, index_key.type,
>  					   &prep.payload, restrict_link->key);
> 
> base-commit: 6f8319e3e9a44dd537d17f41565a8453c560a581
> -- 
> 2.43.0
> 


Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org>

Thanks.

Br, Jarkko

      parent reply	other threads:[~2026-10-02  3:18 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-30  4:18 [PATCH] KEYS: Fix add_key() race with keyring restriction tjdqudcks0424
2026-09-30  4:28 ` sashiko-bot
2026-10-02  3:18 ` Jarkko Sakkinen [this message]

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=ar8ifHy-CQUfxfID@iki.fi \
    --to=jarkko.sakkinen@iki.fi \
    --cc=dhowells@redhat.com \
    --cc=jarkko@kernel.org \
    --cc=keyrings@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=tjdqudcks0424@naver.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.