]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 30 May 2026 10:39:31 +0000 (12:39 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 30 May 2026 10:39:31 +0000 (12:39 +0200)
added patches:
security-keys-fix-missed-rcu-read-section-on-lookup.patch

queue-6.18/security-keys-fix-missed-rcu-read-section-on-lookup.patch [new file with mode: 0644]
queue-6.18/series

diff --git a/queue-6.18/security-keys-fix-missed-rcu-read-section-on-lookup.patch b/queue-6.18/security-keys-fix-missed-rcu-read-section-on-lookup.patch
new file mode 100644 (file)
index 0000000..a28ca2e
--- /dev/null
@@ -0,0 +1,43 @@
+From 43a1e3744548e6fd85873e6fb43e293eb4010694 Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Thu, 28 May 2026 11:45:41 -0700
+Subject: security/keys: fix missed RCU read section on lookup
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+commit 43a1e3744548e6fd85873e6fb43e293eb4010694 upstream.
+
+Nicholas Carlini reports that the keyring code calls assoc_array_find()
+in find_key_to_update() without holding the RCU read lock, while the
+assoc_array_gc() code really is designed around removing the node from
+the tree and then freeing it after an RCU grace-period.
+
+The regular key handling doesn't see this because holding the keyring
+semaphore hides any lifetime issues, but the persistent key handling
+uses a different model.
+
+Instead of extending the keyring locking, just do the simple RCU locking
+that the assoc_array was designed for.
+
+Reported-by: Nicholas Carlini <npc@anthropic.com>
+Cc: David Howells <dhowells@redhat.com>
+Cc: Jarkko Sakkinen <jarkko@kernel.org>
+Cc: Paul Moore <paul@paul-moore.com>
+Cc: James Morris James Morris <jmorris@namei.org>
+Cc: Serge E. Hallyn <serge@hallyn.com>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ security/keys/keyring.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/security/keys/keyring.c
++++ b/security/keys/keyring.c
+@@ -1109,6 +1109,7 @@ key_ref_t find_key_to_update(key_ref_t k
+       kenter("{%d},{%s,%s}",
+              keyring->serial, index_key->type->name, index_key->description);
++      guard(rcu)();
+       object = assoc_array_find(&keyring->keys, &keyring_assoc_array_ops,
+                                 index_key);
index aff04c0ac721fd5993d3060af5c49ff5e481d27d..464258b4c0f4932d8f4ddf917442ba49f61af559 100644 (file)
@@ -375,3 +375,4 @@ io_uring-nop-pass-all-errors-to-userspace.patch
 ksmbd-fix-durable-reconnect-error-path-file-lifetime.patch
 loongarch-kprobes-fix-handling-of-fatal-unrecoverabl.patch
 drm-msm-restore-second-parameter-name-in-purge-and-e.patch
+security-keys-fix-missed-rcu-read-section-on-lookup.patch