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

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

diff --git a/queue-7.0/security-keys-fix-missed-rcu-read-section-on-lookup.patch b/queue-7.0/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 a52e102e962543b1cb82b9b514c67903f5348d6a..8f3872575235ffffc04aeadb4329124197c84942 100644 (file)
@@ -459,3 +459,4 @@ block-avoid-use-after-free-in-disk_free_zone_resourc.patch
 documentation-laptops-update-documentation-for-uniwi.patch
 platform-x86-uniwill-laptop-do-not-enable-the-chargi.patch
 drm-msm-restore-second-parameter-name-in-purge-and-e.patch
+security-keys-fix-missed-rcu-read-section-on-lookup.patch