diff options
-rw-r--r-- | security/integrity/ima/ima_policy.c | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index 03cbba423e59..8bbc18eb07eb 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c | |||
@@ -440,6 +440,17 @@ void ima_update_policy_flag(void) | |||
440 | ima_policy_flag &= ~IMA_APPRAISE; | 440 | ima_policy_flag &= ~IMA_APPRAISE; |
441 | } | 441 | } |
442 | 442 | ||
443 | static int ima_appraise_flag(enum ima_hooks func) | ||
444 | { | ||
445 | if (func == MODULE_CHECK) | ||
446 | return IMA_APPRAISE_MODULES; | ||
447 | else if (func == FIRMWARE_CHECK) | ||
448 | return IMA_APPRAISE_FIRMWARE; | ||
449 | else if (func == POLICY_CHECK) | ||
450 | return IMA_APPRAISE_POLICY; | ||
451 | return 0; | ||
452 | } | ||
453 | |||
443 | /** | 454 | /** |
444 | * ima_init_policy - initialize the default measure rules. | 455 | * ima_init_policy - initialize the default measure rules. |
445 | * | 456 | * |
@@ -478,9 +489,11 @@ void __init ima_init_policy(void) | |||
478 | * Insert the appraise rules requiring file signatures, prior to | 489 | * Insert the appraise rules requiring file signatures, prior to |
479 | * any other appraise rules. | 490 | * any other appraise rules. |
480 | */ | 491 | */ |
481 | for (i = 0; i < secure_boot_entries; i++) | 492 | for (i = 0; i < secure_boot_entries; i++) { |
482 | list_add_tail(&secure_boot_rules[i].list, | 493 | list_add_tail(&secure_boot_rules[i].list, &ima_default_rules); |
483 | &ima_default_rules); | 494 | temp_ima_appraise |= |
495 | ima_appraise_flag(secure_boot_rules[i].func); | ||
496 | } | ||
484 | 497 | ||
485 | for (i = 0; i < appraise_entries; i++) { | 498 | for (i = 0; i < appraise_entries; i++) { |
486 | list_add_tail(&default_appraise_rules[i].list, | 499 | list_add_tail(&default_appraise_rules[i].list, |
@@ -934,12 +947,9 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry) | |||
934 | } | 947 | } |
935 | if (!result && (entry->action == UNKNOWN)) | 948 | if (!result && (entry->action == UNKNOWN)) |
936 | result = -EINVAL; | 949 | result = -EINVAL; |
937 | else if (entry->func == MODULE_CHECK) | 950 | else if (entry->action == APPRAISE) |
938 | temp_ima_appraise |= IMA_APPRAISE_MODULES; | 951 | temp_ima_appraise |= ima_appraise_flag(entry->func); |
939 | else if (entry->func == FIRMWARE_CHECK) | 952 | |
940 | temp_ima_appraise |= IMA_APPRAISE_FIRMWARE; | ||
941 | else if (entry->func == POLICY_CHECK) | ||
942 | temp_ima_appraise |= IMA_APPRAISE_POLICY; | ||
943 | audit_log_format(ab, "res=%d", !result); | 953 | audit_log_format(ab, "res=%d", !result); |
944 | audit_log_end(ab); | 954 | audit_log_end(ab); |
945 | return result; | 955 | return result; |