mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
integrity-v6.6
-----BEGIN PGP SIGNATURE----- iIoEABYIADIWIQQdXVVFGN5XqKr1Hj7LwZzRsCrn5QUCZO0WoxQcem9oYXJAbGlu dXguaWJtLmNvbQAKCRDLwZzRsCrn5alsAP0UZQIKI2zEjFdtucgClcSouflIOC5i Hvtgv3qVFXPZQwEA2H/SGjigtH5NruVXECDZdrIfaGGvBhyeY72lbswXfQ0= =Gu8i -----END PGP SIGNATURE----- Merge tag 'integrity-v6.6' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity Pull integrity subsystem updates from Mimi Zohar: - With commit099f26f22f
("integrity: machine keyring CA configuration") certificates may be loaded onto the IMA keyring, directly or indirectly signed by keys on either the "builtin" or the "machine" keyrings. With the ability for the system/machine owner to sign the IMA policy itself without needing to recompile the kernel, update the IMA architecture specific policy rules to require the IMA policy itself be signed. [ As commit099f26f22f
was upstreamed in linux-6.4, updating the IMA architecture specific policy now to require signed IMA policies may break userspace expectations. ] - IMA only checked the file data hash was not on the system blacklist keyring for files with an appended signature (e.g. kernel modules, Power kernel image). Check all file data hashes regardless of how it was signed - Code cleanup, and a kernel-doc update * tag 'integrity-v6.6' of git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity: kexec_lock: Replace kexec_mutex() by kexec_lock() in two comments ima: require signed IMA policy when UEFI secure boot is enabled integrity: Always reference the blacklist keyring with appraisal ima: Remove deprecated IMA_TRUSTED_KEYRING Kconfig
This commit is contained in:
commit
1a35914f73
@ -57,9 +57,9 @@ Description:
|
||||
stored in security.ima xattr. Requires
|
||||
specifying "digest_type=verity" first.)
|
||||
|
||||
appraise_flag:= [check_blacklist]
|
||||
Currently, blacklist check is only for files signed with appended
|
||||
signature.
|
||||
appraise_flag:= [check_blacklist] (deprecated)
|
||||
Setting the check_blacklist flag is no longer necessary.
|
||||
All appraisal functions set it by default.
|
||||
digest_type:= verity
|
||||
Require fs-verity's file digest instead of the
|
||||
regular IMA file hash.
|
||||
|
@ -23,9 +23,9 @@ bool arch_ima_get_secureboot(void)
|
||||
* is not enabled.
|
||||
*/
|
||||
static const char *const secure_rules[] = {
|
||||
"appraise func=KEXEC_KERNEL_CHECK appraise_flag=check_blacklist appraise_type=imasig|modsig",
|
||||
"appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig|modsig",
|
||||
#ifndef CONFIG_MODULE_SIG
|
||||
"appraise func=MODULE_CHECK appraise_flag=check_blacklist appraise_type=imasig|modsig",
|
||||
"appraise func=MODULE_CHECK appraise_type=imasig|modsig",
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
@ -49,9 +49,9 @@ static const char *const trusted_rules[] = {
|
||||
static const char *const secure_and_trusted_rules[] = {
|
||||
"measure func=KEXEC_KERNEL_CHECK template=ima-modsig",
|
||||
"measure func=MODULE_CHECK template=ima-modsig",
|
||||
"appraise func=KEXEC_KERNEL_CHECK appraise_flag=check_blacklist appraise_type=imasig|modsig",
|
||||
"appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig|modsig",
|
||||
#ifndef CONFIG_MODULE_SIG
|
||||
"appraise func=MODULE_CHECK appraise_flag=check_blacklist appraise_type=imasig|modsig",
|
||||
"appraise func=MODULE_CHECK appraise_type=imasig|modsig",
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
@ -624,7 +624,7 @@ int kexec_locate_mem_hole(struct kexec_buf *kbuf)
|
||||
* kexec_add_buffer - place a buffer in a kexec segment
|
||||
* @kbuf: Buffer contents and memory parameters.
|
||||
*
|
||||
* This function assumes that kexec_mutex is held.
|
||||
* This function assumes that kexec_lock is held.
|
||||
* On successful return, @kbuf->mem will have the physical address of
|
||||
* the buffer in memory.
|
||||
*
|
||||
|
@ -248,18 +248,6 @@ config IMA_APPRAISE_MODSIG
|
||||
The modsig keyword can be used in the IMA policy to allow a hook
|
||||
to accept such signatures.
|
||||
|
||||
config IMA_TRUSTED_KEYRING
|
||||
bool "Require all keys on the .ima keyring be signed (deprecated)"
|
||||
depends on IMA_APPRAISE && SYSTEM_TRUSTED_KEYRING
|
||||
depends on INTEGRITY_ASYMMETRIC_KEYS
|
||||
select INTEGRITY_TRUSTED_KEYRING
|
||||
default y
|
||||
help
|
||||
This option requires that all keys added to the .ima
|
||||
keyring be signed by a key on the system trusted keyring.
|
||||
|
||||
This option is deprecated in favor of INTEGRITY_TRUSTED_KEYRING
|
||||
|
||||
config IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY
|
||||
bool "Permit keys validly signed by a built-in or secondary CA cert (EXPERIMENTAL)"
|
||||
depends on SYSTEM_TRUSTED_KEYRING
|
||||
|
@ -458,11 +458,13 @@ int ima_check_blacklist(struct integrity_iint_cache *iint,
|
||||
ima_get_modsig_digest(modsig, &hash_algo, &digest, &digestsize);
|
||||
|
||||
rc = is_binary_blacklisted(digest, digestsize);
|
||||
if ((rc == -EPERM) && (iint->flags & IMA_MEASURE))
|
||||
process_buffer_measurement(&nop_mnt_idmap, NULL, digest, digestsize,
|
||||
"blacklisted-hash", NONE,
|
||||
pcr, NULL, false, NULL, 0);
|
||||
}
|
||||
} else if (iint->flags & IMA_DIGSIG_REQUIRED && iint->ima_hash)
|
||||
rc = is_binary_blacklisted(iint->ima_hash->digest, iint->ima_hash->length);
|
||||
|
||||
if ((rc == -EPERM) && (iint->flags & IMA_MEASURE))
|
||||
process_buffer_measurement(&nop_mnt_idmap, NULL, digest, digestsize,
|
||||
"blacklisted-hash", NONE,
|
||||
pcr, NULL, false, NULL, 0);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -57,6 +57,9 @@ static const char * const sb_arch_rules[] = {
|
||||
"measure func=KEXEC_KERNEL_CHECK",
|
||||
#if !IS_ENABLED(CONFIG_MODULE_SIG)
|
||||
"appraise func=MODULE_CHECK appraise_type=imasig",
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_INTEGRITY_MACHINE_KEYRING) && IS_ENABLED(CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY)
|
||||
"appraise func=POLICY_CHECK appraise_type=imasig",
|
||||
#endif
|
||||
"measure func=MODULE_CHECK",
|
||||
NULL
|
||||
|
@ -77,7 +77,7 @@ out:
|
||||
* Called during kexec_file_load so that IMA can add a segment to the kexec
|
||||
* image for the measurement list for the next kernel.
|
||||
*
|
||||
* This function assumes that kexec_mutex is held.
|
||||
* This function assumes that kexec_lock is held.
|
||||
*/
|
||||
void ima_add_kexec_buffer(struct kimage *image)
|
||||
{
|
||||
|
@ -1280,7 +1280,7 @@ static bool ima_validate_rule(struct ima_rule_entry *entry)
|
||||
IMA_FSNAME | IMA_GID | IMA_EGID |
|
||||
IMA_FGROUP | IMA_DIGSIG_REQUIRED |
|
||||
IMA_PERMIT_DIRECTIO | IMA_VALIDATE_ALGOS |
|
||||
IMA_VERITY_REQUIRED))
|
||||
IMA_CHECK_BLACKLIST | IMA_VERITY_REQUIRED))
|
||||
return false;
|
||||
|
||||
break;
|
||||
@ -1355,7 +1355,7 @@ static bool ima_validate_rule(struct ima_rule_entry *entry)
|
||||
|
||||
/* Ensure that combinations of flags are compatible with each other */
|
||||
if (entry->flags & IMA_CHECK_BLACKLIST &&
|
||||
!(entry->flags & IMA_MODSIG_ALLOWED))
|
||||
!(entry->flags & IMA_DIGSIG_REQUIRED))
|
||||
return false;
|
||||
|
||||
/*
|
||||
@ -1803,11 +1803,11 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
|
||||
if (entry->flags & IMA_VERITY_REQUIRED)
|
||||
result = -EINVAL;
|
||||
else
|
||||
entry->flags |= IMA_DIGSIG_REQUIRED;
|
||||
entry->flags |= IMA_DIGSIG_REQUIRED | IMA_CHECK_BLACKLIST;
|
||||
} else if (strcmp(args[0].from, "sigv3") == 0) {
|
||||
/* Only fsverity supports sigv3 for now */
|
||||
if (entry->flags & IMA_VERITY_REQUIRED)
|
||||
entry->flags |= IMA_DIGSIG_REQUIRED;
|
||||
entry->flags |= IMA_DIGSIG_REQUIRED | IMA_CHECK_BLACKLIST;
|
||||
else
|
||||
result = -EINVAL;
|
||||
} else if (IS_ENABLED(CONFIG_IMA_APPRAISE_MODSIG) &&
|
||||
@ -1816,18 +1816,13 @@ static int ima_parse_rule(char *rule, struct ima_rule_entry *entry)
|
||||
result = -EINVAL;
|
||||
else
|
||||
entry->flags |= IMA_DIGSIG_REQUIRED |
|
||||
IMA_MODSIG_ALLOWED;
|
||||
IMA_MODSIG_ALLOWED | IMA_CHECK_BLACKLIST;
|
||||
} else {
|
||||
result = -EINVAL;
|
||||
}
|
||||
break;
|
||||
case Opt_appraise_flag:
|
||||
ima_log_string(ab, "appraise_flag", args[0].from);
|
||||
if (IS_ENABLED(CONFIG_IMA_APPRAISE_MODSIG) &&
|
||||
strstr(args[0].from, "blacklist"))
|
||||
entry->flags |= IMA_CHECK_BLACKLIST;
|
||||
else
|
||||
result = -EINVAL;
|
||||
break;
|
||||
case Opt_appraise_algos:
|
||||
ima_log_string(ab, "appraise_algos", args[0].from);
|
||||
@ -2271,8 +2266,6 @@ int ima_policy_show(struct seq_file *m, void *v)
|
||||
}
|
||||
if (entry->flags & IMA_VERITY_REQUIRED)
|
||||
seq_puts(m, "digest_type=verity ");
|
||||
if (entry->flags & IMA_CHECK_BLACKLIST)
|
||||
seq_puts(m, "appraise_flag=check_blacklist ");
|
||||
if (entry->flags & IMA_PERMIT_DIRECTIO)
|
||||
seq_puts(m, "permit_directio ");
|
||||
rcu_read_unlock();
|
||||
|
Loading…
Reference in New Issue
Block a user