[PATCH 3/3] ima: remove the experimental IMA blacklist keyring

From: Mimi Zohar

Date: Fri Nov 06 2026 - 12:38:00 EST


The experimental IMA blacklist keyring accepts any certificate signed by
a key on the builtin trusted keyring. Since every certificate issued by
such a key qualifies, root can add any of them, including legitimate
ones. Nothing differentiates the authority to sign from the authority
to revoke.

Remove CONFIG_IMA_BLACKLIST_KEYRING, the ".ima_blacklist" keyring in
ima_mok.c, get_ima_blacklist_keyring() and the related Kconfig help
text.

Signed-off-by: Mimi Zohar <zohar@xxxxxxxxxxxxx>
---
include/keys/system_keyring.h | 14 ---------
security/integrity/ima/Kconfig | 13 +--------
security/integrity/ima/Makefile | 1 -
security/integrity/ima/ima_mok.c | 49 --------------------------------
4 files changed, 1 insertion(+), 76 deletions(-)
delete mode 100644 security/integrity/ima/ima_mok.c

diff --git a/include/keys/system_keyring.h b/include/keys/system_keyring.h
index 2ac1dae2063a..61e5aba26e24 100644
--- a/include/keys/system_keyring.h
+++ b/include/keys/system_keyring.h
@@ -119,20 +119,6 @@ static inline int is_key_on_revocation_list(struct pkcs7_message *pkcs7)
}
#endif

-#ifdef CONFIG_IMA_BLACKLIST_KEYRING
-extern struct key *ima_blacklist_keyring;
-
-static inline struct key *get_ima_blacklist_keyring(void)
-{
- return ima_blacklist_keyring;
-}
-#else
-static inline struct key *get_ima_blacklist_keyring(void)
-{
- return NULL;
-}
-#endif /* CONFIG_IMA_BLACKLIST_KEYRING */
-
#if defined(CONFIG_INTEGRITY_PLATFORM_KEYRING) && \
defined(CONFIG_SYSTEM_TRUSTED_KEYRING)
extern void __init set_platform_trusted_keys(struct key *keyring);
diff --git a/security/integrity/ima/Kconfig b/security/integrity/ima/Kconfig
index 72654cf797cd..fc42ddd34385 100644
--- a/security/integrity/ima/Kconfig
+++ b/security/integrity/ima/Kconfig
@@ -255,7 +255,7 @@ config IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY
select INTEGRITY_TRUSTED_KEYRING
default n
help
- Keys may be added to the IMA or IMA blacklist keyrings, if the
+ Keys may be added to the IMA keyring, if the
key is validly signed by a CA cert in the system built-in,
machine (if configured), or secondary trusted keyrings. The
key must also have the digitalSignature usage set.
@@ -265,17 +265,6 @@ config IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY
provided they are validly signed by a key already resident in the
built-in, machine (if configured) or secondary trusted keyrings.

-config IMA_BLACKLIST_KEYRING
- bool "Create IMA machine owner blacklist keyrings (EXPERIMENTAL)"
- depends on SYSTEM_TRUSTED_KEYRING
- depends on INTEGRITY_TRUSTED_KEYRING
- default n
- help
- This option creates an IMA blacklist keyring, which contains all
- revoked IMA keys. It is consulted before any other keyring. If
- the search is successful the requested operation is rejected and
- an error is returned to the caller.
-
config IMA_LOAD_X509
bool "Load X509 certificate onto the '.ima' trusted keyring"
depends on INTEGRITY_TRUSTED_KEYRING
diff --git a/security/integrity/ima/Makefile b/security/integrity/ima/Makefile
index b376d38b4ee6..ad5840ba085e 100644
--- a/security/integrity/ima/Makefile
+++ b/security/integrity/ima/Makefile
@@ -11,7 +11,6 @@ ima-y := ima_fs.o ima_queue.o ima_init.o ima_main.o ima_crypto.o ima_api.o \
ima-$(CONFIG_IMA_APPRAISE) += ima_appraise.o
ima-$(CONFIG_IMA_APPRAISE_MODSIG) += ima_modsig.o
ima-$(CONFIG_HAVE_IMA_KEXEC) += ima_kexec.o
-ima-$(CONFIG_IMA_BLACKLIST_KEYRING) += ima_mok.o
ima-$(CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS) += ima_asymmetric_keys.o
ima-$(CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS) += ima_queue_keys.o

diff --git a/security/integrity/ima/ima_mok.c b/security/integrity/ima/ima_mok.c
deleted file mode 100644
index 14d93d573a6a..000000000000
--- a/security/integrity/ima/ima_mok.c
+++ /dev/null
@@ -1,49 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * Copyright (C) 2015 Juniper Networks, Inc.
- *
- * Author:
- * Petko Manolov <petko.manolov@xxxxxxxxxxxx>
- */
-
-#include <linux/export.h>
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/cred.h>
-#include <linux/err.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <keys/system_keyring.h>
-
-
-struct key *ima_blacklist_keyring;
-
-/*
- * Allocate the IMA blacklist keyring
- */
-static __init int ima_mok_init(void)
-{
- struct key_restriction *restriction;
-
- pr_notice("Allocating IMA blacklist keyring.\n");
-
- restriction = kzalloc_obj(struct key_restriction);
- if (!restriction)
- panic("Can't allocate IMA blacklist restriction.");
-
- restriction->check = restrict_link_by_builtin_trusted;
-
- ima_blacklist_keyring = keyring_alloc(".ima_blacklist",
- KUIDT_INIT(0), KGIDT_INIT(0), current_cred(),
- (KEY_POS_ALL & ~KEY_POS_SETATTR) |
- KEY_USR_VIEW | KEY_USR_READ |
- KEY_USR_WRITE | KEY_USR_SEARCH,
- KEY_ALLOC_NOT_IN_QUOTA |
- KEY_ALLOC_SET_KEEP,
- restriction, NULL);
-
- if (IS_ERR(ima_blacklist_keyring))
- panic("Can't allocate IMA blacklist keyring.");
- return 0;
-}
-device_initcall(ima_mok_init);
--
2.56.0