|
@@ -114,6 +114,7 @@ static struct ima_rule_entry default_measurement_rules[] = {
|
|
|
.uid = GLOBAL_ROOT_UID, .flags = IMA_FUNC | IMA_INMASK | IMA_UID},
|
|
|
{.action = MEASURE, .func = MODULE_CHECK, .flags = IMA_FUNC},
|
|
|
{.action = MEASURE, .func = FIRMWARE_CHECK, .flags = IMA_FUNC},
|
|
|
+ {.action = MEASURE, .func = POLICY_CHECK, .flags = IMA_FUNC},
|
|
|
};
|
|
|
|
|
|
static struct ima_rule_entry default_appraise_rules[] = {
|
|
@@ -618,6 +619,8 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
|
|
|
else if (strcmp(args[0].from, "KEXEC_INITRAMFS_CHECK")
|
|
|
== 0)
|
|
|
entry->func = KEXEC_INITRAMFS_CHECK;
|
|
|
+ else if (strcmp(args[0].from, "POLICY_CHECK") == 0)
|
|
|
+ entry->func = POLICY_CHECK;
|
|
|
else
|
|
|
result = -EINVAL;
|
|
|
if (!result)
|
|
@@ -776,6 +779,8 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
|
|
|
temp_ima_appraise |= IMA_APPRAISE_MODULES;
|
|
|
else if (entry->func == FIRMWARE_CHECK)
|
|
|
temp_ima_appraise |= IMA_APPRAISE_FIRMWARE;
|
|
|
+ else if (entry->func == POLICY_CHECK)
|
|
|
+ temp_ima_appraise |= IMA_APPRAISE_POLICY;
|
|
|
audit_log_format(ab, "res=%d", !result);
|
|
|
audit_log_end(ab);
|
|
|
return result;
|
|
@@ -862,7 +867,8 @@ static char *mask_tokens[] = {
|
|
|
enum {
|
|
|
func_file = 0, func_mmap, func_bprm,
|
|
|
func_module, func_firmware, func_post,
|
|
|
- func_kexec_kernel, func_kexec_initramfs
|
|
|
+ func_kexec_kernel, func_kexec_initramfs,
|
|
|
+ func_policy
|
|
|
};
|
|
|
|
|
|
static char *func_tokens[] = {
|
|
@@ -873,6 +879,7 @@ static char *func_tokens[] = {
|
|
|
"FIRMWARE_CHECK",
|
|
|
"KEXEC_KERNEL_CHECK",
|
|
|
"KEXEC_INITRAMFS_CHECK",
|
|
|
+ "POLICY_CHECK",
|
|
|
"POST_SETATTR"
|
|
|
};
|
|
|
|
|
@@ -944,6 +951,9 @@ static void policy_func_show(struct seq_file *m, enum ima_hooks func)
|
|
|
case KEXEC_INITRAMFS_CHECK:
|
|
|
seq_printf(m, pt(Opt_func), ft(func_kexec_initramfs));
|
|
|
break;
|
|
|
+ case POLICY_CHECK:
|
|
|
+ seq_printf(m, pt(Opt_func), ft(func_policy));
|
|
|
+ break;
|
|
|
default:
|
|
|
snprintf(tbuf, sizeof(tbuf), "%d", func);
|
|
|
seq_printf(m, pt(Opt_func), tbuf);
|