ima: add a knob ima= to allow disabling IMA in kdump kernel

Kdump kernel doesn't need IMA functionality, and enabling IMA will cost
extra memory. It would be very helpful to allow IMA to be disabled for
kdump kernel.

Hence add a knob ima=on|off here to allow turning IMA off in kdump
kernel if needed.

Note that this IMA disabling is limited to kdump kernel, please don't
abuse it in other kernel and thus serious consequences are caused.

Signed-off-by: Baoquan He <bhe@redhat.com>
Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
This commit is contained in:
Baoquan He 2025-06-14 10:23:42 +08:00 committed by Mimi Zohar
parent e04c78d86a
commit aa9bb1b325
2 changed files with 31 additions and 0 deletions

View file

@ -2212,6 +2212,11 @@
different crypto accelerators. This option can be used
to achieve best performance for particular HW.
ima= [IMA] Enable or disable IMA
Format: { "off" | "on" }
Default: "on"
Note that disabling IMA is limited to kdump kernel.
indirect_target_selection= [X86,Intel] Mitigation control for Indirect
Target Selection(ITS) bug in Intel CPUs. Updated
microcode is also required for a fix in IBPB.

View file

@ -27,6 +27,7 @@
#include <linux/fs.h>
#include <linux/iversion.h>
#include <linux/evm.h>
#include <linux/crash_dump.h>
#include "ima.h"
@ -38,11 +39,30 @@ int ima_appraise;
int __ro_after_init ima_hash_algo = HASH_ALGO_SHA1;
static int hash_setup_done;
static int ima_disabled __ro_after_init;
static struct notifier_block ima_lsm_policy_notifier = {
.notifier_call = ima_lsm_policy_change,
};
static int __init ima_setup(char *str)
{
if (!is_kdump_kernel()) {
pr_info("Warning: ima setup option only permitted in kdump");
return 1;
}
if (strncmp(str, "off", 3) == 0)
ima_disabled = 1;
else if (strncmp(str, "on", 2) == 0)
ima_disabled = 0;
else
pr_err("Invalid ima setup option: \"%s\" , please specify ima=on|off.", str);
return 1;
}
__setup("ima=", ima_setup);
static int __init hash_setup(char *str)
{
struct ima_template_desc *template_desc = ima_template_desc_current();
@ -1186,6 +1206,12 @@ static int __init init_ima(void)
{
int error;
/*Note that turning IMA off is intentionally limited to kdump kernel.*/
if (ima_disabled && is_kdump_kernel()) {
pr_info("IMA functionality is disabled");
return 0;
}
ima_appraise_parse_cmdline();
ima_init_template_list();
hash_setup(CONFIG_IMA_DEFAULT_HASH);