summaryrefslogtreecommitdiff
path: root/security/integrity/platform_certs/load_powerpc.c
diff options
context:
space:
mode:
authorNayna Jain <nayna@linux.ibm.com>2023-08-15 14:27:22 +0300
committerJarkko Sakkinen <jarkko@kernel.org>2023-08-17 23:12:35 +0300
commit44e69ea53892f18e8753943a4376de20b076c3fe (patch)
treec20731fd41dfedd00dd77d34c0e66b0b806bfa79 /security/integrity/platform_certs/load_powerpc.c
parentd7d91c4743c4ef0f60b7556d2794b6dd27cda373 (diff)
downloadlinux-44e69ea53892f18e8753943a4376de20b076c3fe.tar.xz
integrity: PowerVM support for loading third party code signing keys
On secure boot enabled PowerVM LPAR, third party code signing keys are needed during early boot to verify signed third party modules. These third party keys are stored in moduledb object in the Platform KeyStore (PKS). Load third party code signing keys onto .secondary_trusted_keys keyring. Signed-off-by: Nayna Jain <nayna@linux.ibm.com> Reviewed-and-tested-by: Mimi Zohar <zohar@linux.ibm.com> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Tested-by: Nageswara R Sastry <rnsastry@linux.ibm.com> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
Diffstat (limited to 'security/integrity/platform_certs/load_powerpc.c')
-rw-r--r--security/integrity/platform_certs/load_powerpc.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/security/integrity/platform_certs/load_powerpc.c b/security/integrity/platform_certs/load_powerpc.c
index 339053d9726d..c85febca3343 100644
--- a/security/integrity/platform_certs/load_powerpc.c
+++ b/security/integrity/platform_certs/load_powerpc.c
@@ -60,6 +60,7 @@ static int __init load_powerpc_certs(void)
{
void *db = NULL, *dbx = NULL, *data = NULL;
void *trustedca;
+ void *moduledb;
u64 dsize = 0;
u64 offset = 0;
int rc = 0;
@@ -137,6 +138,22 @@ static int __init load_powerpc_certs(void)
kfree(data);
}
+ data = get_cert_list("moduledb", 9, &dsize);
+ if (!data) {
+ pr_info("Couldn't get moduledb list from firmware\n");
+ } else if (IS_ERR(data)) {
+ rc = PTR_ERR(data);
+ pr_err("Error reading moduledb from firmware: %d\n", rc);
+ } else {
+ extract_esl(moduledb, data, dsize, offset);
+
+ rc = parse_efi_signature_list("powerpc:moduledb", moduledb, dsize,
+ get_handler_for_code_signing_keys);
+ if (rc)
+ pr_err("Couldn't parse moduledb signatures: %d\n", rc);
+ kfree(data);
+ }
+
return rc;
}
late_initcall(load_powerpc_certs);