mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-14 07:44:21 +08:00
fsverity: skip PKCS#7 parser when keyring is empty
commit919dc32095
upstream. If an fsverity builtin signature is given for a file but the ".fs-verity" keyring is empty, there's no real reason to run the PKCS#7 parser. Skip this to avoid the PKCS#7 attack surface when builtin signature support is configured into the kernel but is not being used. This is a hardening improvement, not a fix per se, but I've added Fixes and Cc stable to get it out to more users. Fixes:432434c9f8
("fs-verity: support builtin file signatures") Cc: stable@vger.kernel.org Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Link: https://lore.kernel.org/r/20230820173237.2579-1-ebiggers@kernel.org Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
86608e1b0c
commit
5294144b6a
@ -54,6 +54,22 @@ int fsverity_verify_signature(const struct fsverity_info *vi,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (fsverity_keyring->keys.nr_leaves_on_tree == 0) {
|
||||
/*
|
||||
* The ".fs-verity" keyring is empty, due to builtin signatures
|
||||
* being supported by the kernel but not actually being used.
|
||||
* In this case, verify_pkcs7_signature() would always return an
|
||||
* error, usually ENOKEY. It could also be EBADMSG if the
|
||||
* PKCS#7 is malformed, but that isn't very important to
|
||||
* distinguish. So, just skip to ENOKEY to avoid the attack
|
||||
* surface of the PKCS#7 parser, which would otherwise be
|
||||
* reachable by any task able to execute FS_IOC_ENABLE_VERITY.
|
||||
*/
|
||||
fsverity_err(inode,
|
||||
"fs-verity keyring is empty, rejecting signed file!");
|
||||
return -ENOKEY;
|
||||
}
|
||||
|
||||
d = kzalloc(sizeof(*d) + hash_alg->digest_size, GFP_KERNEL);
|
||||
if (!d)
|
||||
return -ENOMEM;
|
||||
|
Loading…
Reference in New Issue
Block a user