integrity, KEYS: add a reference to platform keyring
authorKairui Song <kasong@redhat.com>
Mon, 21 Jan 2019 09:59:28 +0000 (17:59 +0800)
committerMimi Zohar <zohar@linux.ibm.com>
Mon, 4 Feb 2019 22:29:19 +0000 (17:29 -0500)
commit 9dc92c45177a ("integrity: Define a trusted platform keyring")
introduced a .platform keyring for storing preboot keys, used for
verifying kernel image signatures. Currently only IMA-appraisal is able
to use the keyring to verify kernel images that have their signature
stored in xattr.

This patch exposes the .platform keyring, making it accessible for
verifying PE signed kernel images as well.

Suggested-by: Mimi Zohar <zohar@linux.ibm.com>
Signed-off-by: Kairui Song <kasong@redhat.com>
Cc: David Howells <dhowells@redhat.com>
[zohar@linux.ibm.com: fixed checkpatch errors, squashed with patch fix]
Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
certs/system_keyring.c
include/keys/system_keyring.h
security/integrity/digsig.c

index 81728717523d0513ff5cbff1e497c9e81a7fb7dc..da055e901df49e42681af09e6732b59953944cda 100644 (file)
@@ -24,6 +24,9 @@ static struct key *builtin_trusted_keys;
 #ifdef CONFIG_SECONDARY_TRUSTED_KEYRING
 static struct key *secondary_trusted_keys;
 #endif
+#ifdef CONFIG_INTEGRITY_PLATFORM_KEYRING
+static struct key *platform_trusted_keys;
+#endif
 
 extern __initconst const u8 system_certificate_list[];
 extern __initconst const unsigned long system_certificate_list_size;
@@ -266,3 +269,10 @@ error:
 EXPORT_SYMBOL_GPL(verify_pkcs7_signature);
 
 #endif /* CONFIG_SYSTEM_DATA_VERIFICATION */
+
+#ifdef CONFIG_INTEGRITY_PLATFORM_KEYRING
+void __init set_platform_trusted_keys(struct key *keyring)
+{
+       platform_trusted_keys = keyring;
+}
+#endif
index 359c2f936004b42d4e892170f6e686213d7e3d63..42a93eda331cc842820f7488084f7e24772f3b7f 100644 (file)
@@ -61,5 +61,13 @@ static inline struct key *get_ima_blacklist_keyring(void)
 }
 #endif /* CONFIG_IMA_BLACKLIST_KEYRING */
 
+#if defined(CONFIG_INTEGRITY_PLATFORM_KEYRING) && \
+       defined(CONFIG_SYSTEM_TRUSTED_KEYRING)
+extern void __init set_platform_trusted_keys(struct key *keyring);
+#else
+static inline void set_platform_trusted_keys(struct key *keyring)
+{
+}
+#endif
 
 #endif /* _KEYS_SYSTEM_KEYRING_H */
index f45d6edecf99a187c0e251f4a135b084945b2cfc..e19c2eb72c51b53b878021688131bcdf705e65a8 100644 (file)
@@ -87,6 +87,9 @@ static int __integrity_init_keyring(const unsigned int id, key_perm_t perm,
                pr_info("Can't allocate %s keyring (%d)\n",
                        keyring_name[id], err);
                keyring[id] = NULL;
+       } else {
+               if (id == INTEGRITY_KEYRING_PLATFORM)
+                       set_platform_trusted_keys(keyring[id]);
        }
 
        return err;