From: Jarkko Sakkinen <jarkko@kernel.org>
To: David Howells <dhowells@redhat.com>
Cc: Jarkko Sakkinen <jarkko@kernel.org>,
bpf@vger.kernel.org, dm-devel@lists.linux.dev,
fsverity@lists.linux.dev, keyrings@vger.kernel.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org,
linux-security-module@vger.kernel.org,
Alasdair Kergon <agk@redhat.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Alexei Starovoitov <ast@kernel.org>, Alex Shi <alexs@kernel.org>,
Anastasia Eskova <anastasia.eskova@ibm.com>,
Andrew Morton <akpm@linux-foundation.org>,
Andrii Nakryiko <andrii@kernel.org>,
Benjamin Marzinski <bmarzins@redhat.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Daniel Borkmann <daniel@iogearbox.net>,
Dongliang Mu <dzm91@hust.edu.cn>,
Eduard Zingerman <eddyz87@gmail.com>,
Emil Tsalapatis <emil@etsalapatis.com>,
Eric Biggers <ebiggers@kernel.org>,
Ignat Korchagin <ignat@linux.win>,
Heiko Carstens <hca@linux.ibm.com>,
Ihor Solodrai <ihor.solodrai@linux.dev>,
James Bottomley <James.Bottomley@HansenPartnership.com>,
James Morris <jmorris@namei.org>, Jiri Olsa <jolsa@kernel.org>,
Jonathan Corbet <corbet@lwn.net>,
Kumar Kartikeya Dwivedi <memxor@gmail.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Martin KaFai Lau <martin.lau@linux.dev>,
Mike Snitzer <snitzer@kernel.org>,
Mikulas Patocka <mpatocka@redhat.com>,
Mimi Zohar <zohar@linux.ibm.com>,
Paul Moore <paul@paul-moore.com>,
Peter Oberparleiter <oberpar@linux.ibm.com>,
Randy Dunlap <rdunlap@infradead.org>,
Roberto Sassu <roberto.sassu@huawei.com>,
"Serge E. Hallyn" <serge@hallyn.com>,
Shuah Khan <skhan@linuxfoundation.org>,
Song Liu <song@kernel.org>, Sven Schnelle <svens@linux.ibm.com>,
"Theodore Y. Ts'o" <tytso@mit.edu>,
Vasily Gorbik <gor@linux.ibm.com>,
Yanteng Si <si.yanteng@linux.dev>,
Yonghong Song <yonghong.song@linux.dev>,
stable@vger.kernel.org
Subject: [PATCH v13 1/7] s390/cert_store: Pin the user session keyring
Date: Sat, 14 Nov 2026 21:36:25 +0200 [thread overview]
Message-ID: <20261114193631.731615-2-jarkko@kernel.org> (raw)
In-Reply-To: <20261114193631.731615-1-jarkko@kernel.org>
The user session keyring stays alive only because the session keyring is
pinned by current_cred().
Pin the reference at:
1. find_cs_keyring()
2. cleanup_cs_keys()
3. create_cs_keyring()
Cc: David Howells <dhowells@redhat.com>
Cc: stable@vger.kernel.org # v6.1+
Fixes: 8cf57d7217c3 ("s390: add support for user-defined certificates")
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
---
arch/s390/kernel/cert_store.c | 27 +++++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/arch/s390/kernel/cert_store.c b/arch/s390/kernel/cert_store.c
index 998f2da56175..bb218b42a2c9 100644
--- a/arch/s390/kernel/cert_store.c
+++ b/arch/s390/kernel/cert_store.c
@@ -307,7 +307,6 @@ static struct key *get_user_session_keyring(void)
PTR_ERR(us_keyring_ref));
return ERR_PTR(-ENOKEY);
}
- key_ref_put(us_keyring_ref);
return key_ref_to_ptr(us_keyring_ref);
}
@@ -352,11 +351,17 @@ static int invalidate_keyring_keys(struct key *keyring)
static struct key *find_cs_keyring(void)
{
key_ref_t cs_keyring_ref;
+ struct key *us_keyring;
struct key *cs_keyring;
- cs_keyring_ref = keyring_search(make_key_ref(get_user_session_keyring(), true),
+ us_keyring = get_user_session_keyring();
+ if (IS_ERR(us_keyring))
+ return NULL;
+
+ cs_keyring_ref = keyring_search(make_key_ref(us_keyring, true),
&key_type_keyring, CERT_STORE_KEYRING_NAME,
false);
+ key_put(us_keyring);
if (!IS_ERR(cs_keyring_ref)) {
cs_keyring = key_ref_to_ptr(cs_keyring_ref);
key_ref_put(cs_keyring_ref);
@@ -373,6 +378,7 @@ static struct key *find_cs_keyring(void)
static void cleanup_cs_keys(void)
{
+ struct key *us_keyring;
struct key *cs_keyring;
cs_keyring = find_cs_keyring();
@@ -390,20 +396,33 @@ static void cleanup_cs_keys(void)
keyring_clear(cs_keyring);
key_invalidate(cs_keyring);
key_put(cs_keyring);
- key_unlink(get_user_session_keyring(), cs_keyring);
+
+ us_keyring = get_user_session_keyring();
+ if (IS_ERR(us_keyring))
+ return;
+
+ key_unlink(us_keyring, cs_keyring);
+ key_put(us_keyring);
}
static struct key *create_cs_keyring(void)
{
static struct key *cs_keyring;
+ struct key *us_keyring;
/* Cleanup previous cs_keyring and all associated keys if any. */
cleanup_cs_keys();
+
+ us_keyring = get_user_session_keyring();
+ if (IS_ERR(us_keyring))
+ return NULL;
+
cs_keyring = keyring_alloc(CERT_STORE_KEYRING_NAME, GLOBAL_ROOT_UID,
GLOBAL_ROOT_GID, current_cred(),
(KEY_POS_ALL & ~KEY_POS_SETATTR) | KEY_USR_VIEW | KEY_USR_READ,
KEY_ALLOC_NOT_IN_QUOTA | KEY_ALLOC_SET_KEEP,
- NULL, get_user_session_keyring());
+ NULL, us_keyring);
+ key_put(us_keyring);
if (IS_ERR(cs_keyring)) {
pr_dbf_msg("Can't allocate cert_store keyring");
return NULL;
--
2.47.3
next prev parent reply other threads:[~2026-11-14 19:37 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-14 19:36 [PATCH v13 0/7] KEYS: Replace assoc_array with rhashtable Jarkko Sakkinen
2026-11-14 19:36 ` Jarkko Sakkinen [this message]
2026-11-14 19:50 ` [PATCH v13 1/7] s390/cert_store: Pin the user session keyring sashiko-bot
2026-11-14 19:36 ` [PATCH v13 2/7] s390/cert_store: Return an owned reference from find_cs_keyring() Jarkko Sakkinen
2026-11-14 19:47 ` sashiko-bot
2026-11-14 19:36 ` [PATCH v13 3/7] s390/cert_store: Skip keys that disappeared during invalidation Jarkko Sakkinen
2026-11-14 19:46 ` sashiko-bot
2026-11-14 19:36 ` [PATCH v13 4/7] s390/cert_store: Read-lock keyring semaphore in invalidate_keyring_keys() Jarkko Sakkinen
2026-11-14 19:42 ` sashiko-bot
2026-11-14 19:36 ` [PATCH v13 5/7] KEYS: Introduce keyring_is_empty() Jarkko Sakkinen
2026-11-14 19:41 ` sashiko-bot
2026-11-14 19:36 ` [PATCH v13 6/7] KEYS: Replace assoc_array with rhashtable Jarkko Sakkinen
2026-11-14 19:54 ` sashiko-bot
2026-11-14 19:36 ` [PATCH v13 7/7] lib: Remove assoc_array Jarkko Sakkinen
2026-11-14 19:44 ` 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=20261114193631.731615-2-jarkko@kernel.org \
--to=jarkko@kernel.org \
--cc=James.Bottomley@HansenPartnership.com \
--cc=agk@redhat.com \
--cc=agordeev@linux.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=alexs@kernel.org \
--cc=anastasia.eskova@ibm.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bmarzins@redhat.com \
--cc=borntraeger@linux.ibm.com \
--cc=bpf@vger.kernel.org \
--cc=corbet@lwn.net \
--cc=daniel@iogearbox.net \
--cc=dhowells@redhat.com \
--cc=dm-devel@lists.linux.dev \
--cc=dzm91@hust.edu.cn \
--cc=ebiggers@kernel.org \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=fsverity@lists.linux.dev \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=ignat@linux.win \
--cc=ihor.solodrai@linux.dev \
--cc=jmorris@namei.org \
--cc=jolsa@kernel.org \
--cc=keyrings@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=mpatocka@redhat.com \
--cc=oberpar@linux.ibm.com \
--cc=paul@paul-moore.com \
--cc=rdunlap@infradead.org \
--cc=roberto.sassu@huawei.com \
--cc=serge@hallyn.com \
--cc=si.yanteng@linux.dev \
--cc=skhan@linuxfoundation.org \
--cc=snitzer@kernel.org \
--cc=song@kernel.org \
--cc=stable@vger.kernel.org \
--cc=svens@linux.ibm.com \
--cc=torvalds@linux-foundation.org \
--cc=tytso@mit.edu \
--cc=yonghong.song@linux.dev \
--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.