From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Nayna Jain <nayna@linux.ibm.com>,
Mimi Zohar <zohar@linux.ibm.com>,
Eric Richter <erichte@linux.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 5.4 68/71] x86/efi: move common keyring handler functions to new file
Date: Mon, 28 Jun 2021 10:30:01 -0400 [thread overview]
Message-ID: <20210628143004.32596-69-sashal@kernel.org> (raw)
In-Reply-To: <20210628143004.32596-1-sashal@kernel.org>
From: Nayna Jain <nayna@linux.ibm.com>
[ Upstream commit ad723674d6758478829ee766e3f1a2a24d56236f ]
The handlers to add the keys to the .platform keyring and blacklisted
hashes to the .blacklist keyring is common for both the uefi and powerpc
mechanisms of loading the keys/hashes from the firmware.
This patch moves the common code from load_uefi.c to keyring_handler.c
Signed-off-by: Nayna Jain <nayna@linux.ibm.com>
Acked-by: Mimi Zohar <zohar@linux.ibm.com>
Signed-off-by: Eric Richter <erichte@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/1573441836-3632-4-git-send-email-nayna@linux.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
security/integrity/Makefile | 3 +-
.../platform_certs/keyring_handler.c | 80 +++++++++++++++++++
.../platform_certs/keyring_handler.h | 32 ++++++++
security/integrity/platform_certs/load_uefi.c | 67 +---------------
4 files changed, 115 insertions(+), 67 deletions(-)
create mode 100644 security/integrity/platform_certs/keyring_handler.c
create mode 100644 security/integrity/platform_certs/keyring_handler.h
diff --git a/security/integrity/Makefile b/security/integrity/Makefile
index 35e6ca773734..351c9662994b 100644
--- a/security/integrity/Makefile
+++ b/security/integrity/Makefile
@@ -11,7 +11,8 @@ integrity-$(CONFIG_INTEGRITY_SIGNATURE) += digsig.o
integrity-$(CONFIG_INTEGRITY_ASYMMETRIC_KEYS) += digsig_asymmetric.o
integrity-$(CONFIG_INTEGRITY_PLATFORM_KEYRING) += platform_certs/platform_keyring.o
integrity-$(CONFIG_LOAD_UEFI_KEYS) += platform_certs/efi_parser.o \
- platform_certs/load_uefi.o
+ platform_certs/load_uefi.o \
+ platform_certs/keyring_handler.o
integrity-$(CONFIG_LOAD_IPL_KEYS) += platform_certs/load_ipl_s390.o
obj-$(CONFIG_IMA) += ima/
diff --git a/security/integrity/platform_certs/keyring_handler.c b/security/integrity/platform_certs/keyring_handler.c
new file mode 100644
index 000000000000..c5ba695c10e3
--- /dev/null
+++ b/security/integrity/platform_certs/keyring_handler.c
@@ -0,0 +1,80 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/cred.h>
+#include <linux/err.h>
+#include <linux/efi.h>
+#include <linux/slab.h>
+#include <keys/asymmetric-type.h>
+#include <keys/system_keyring.h>
+#include "../integrity.h"
+
+static efi_guid_t efi_cert_x509_guid __initdata = EFI_CERT_X509_GUID;
+static efi_guid_t efi_cert_x509_sha256_guid __initdata =
+ EFI_CERT_X509_SHA256_GUID;
+static efi_guid_t efi_cert_sha256_guid __initdata = EFI_CERT_SHA256_GUID;
+
+/*
+ * Blacklist a hash.
+ */
+static __init void uefi_blacklist_hash(const char *source, const void *data,
+ size_t len, const char *type,
+ size_t type_len)
+{
+ char *hash, *p;
+
+ hash = kmalloc(type_len + len * 2 + 1, GFP_KERNEL);
+ if (!hash)
+ return;
+ p = memcpy(hash, type, type_len);
+ p += type_len;
+ bin2hex(p, data, len);
+ p += len * 2;
+ *p = 0;
+
+ mark_hash_blacklisted(hash);
+ kfree(hash);
+}
+
+/*
+ * Blacklist an X509 TBS hash.
+ */
+static __init void uefi_blacklist_x509_tbs(const char *source,
+ const void *data, size_t len)
+{
+ uefi_blacklist_hash(source, data, len, "tbs:", 4);
+}
+
+/*
+ * Blacklist the hash of an executable.
+ */
+static __init void uefi_blacklist_binary(const char *source,
+ const void *data, size_t len)
+{
+ uefi_blacklist_hash(source, data, len, "bin:", 4);
+}
+
+/*
+ * Return the appropriate handler for particular signature list types found in
+ * the UEFI db and MokListRT tables.
+ */
+__init efi_element_handler_t get_handler_for_db(const efi_guid_t *sig_type)
+{
+ if (efi_guidcmp(*sig_type, efi_cert_x509_guid) == 0)
+ return add_to_platform_keyring;
+ return 0;
+}
+
+/*
+ * Return the appropriate handler for particular signature list types found in
+ * the UEFI dbx and MokListXRT tables.
+ */
+__init efi_element_handler_t get_handler_for_dbx(const efi_guid_t *sig_type)
+{
+ if (efi_guidcmp(*sig_type, efi_cert_x509_sha256_guid) == 0)
+ return uefi_blacklist_x509_tbs;
+ if (efi_guidcmp(*sig_type, efi_cert_sha256_guid) == 0)
+ return uefi_blacklist_binary;
+ return 0;
+}
diff --git a/security/integrity/platform_certs/keyring_handler.h b/security/integrity/platform_certs/keyring_handler.h
new file mode 100644
index 000000000000..2462bfa08fe3
--- /dev/null
+++ b/security/integrity/platform_certs/keyring_handler.h
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef PLATFORM_CERTS_INTERNAL_H
+#define PLATFORM_CERTS_INTERNAL_H
+
+#include <linux/efi.h>
+
+void blacklist_hash(const char *source, const void *data,
+ size_t len, const char *type,
+ size_t type_len);
+
+/*
+ * Blacklist an X509 TBS hash.
+ */
+void blacklist_x509_tbs(const char *source, const void *data, size_t len);
+
+/*
+ * Blacklist the hash of an executable.
+ */
+void blacklist_binary(const char *source, const void *data, size_t len);
+
+/*
+ * Return the handler for particular signature list types found in the db.
+ */
+efi_element_handler_t get_handler_for_db(const efi_guid_t *sig_type);
+
+/*
+ * Return the handler for particular signature list types found in the dbx.
+ */
+efi_element_handler_t get_handler_for_dbx(const efi_guid_t *sig_type);
+
+#endif
diff --git a/security/integrity/platform_certs/load_uefi.c b/security/integrity/platform_certs/load_uefi.c
index 020fc7a11ef0..aa874d84e413 100644
--- a/security/integrity/platform_certs/load_uefi.c
+++ b/security/integrity/platform_certs/load_uefi.c
@@ -9,6 +9,7 @@
#include <keys/asymmetric-type.h>
#include <keys/system_keyring.h>
#include "../integrity.h"
+#include "keyring_handler.h"
static efi_guid_t efi_cert_x509_guid __initdata = EFI_CERT_X509_GUID;
static efi_guid_t efi_cert_x509_sha256_guid __initdata =
@@ -69,72 +70,6 @@ static __init void *get_cert_list(efi_char16_t *name, efi_guid_t *guid,
return db;
}
-/*
- * Blacklist a hash.
- */
-static __init void uefi_blacklist_hash(const char *source, const void *data,
- size_t len, const char *type,
- size_t type_len)
-{
- char *hash, *p;
-
- hash = kmalloc(type_len + len * 2 + 1, GFP_KERNEL);
- if (!hash)
- return;
- p = memcpy(hash, type, type_len);
- p += type_len;
- bin2hex(p, data, len);
- p += len * 2;
- *p = 0;
-
- mark_hash_blacklisted(hash);
- kfree(hash);
-}
-
-/*
- * Blacklist an X509 TBS hash.
- */
-static __init void uefi_blacklist_x509_tbs(const char *source,
- const void *data, size_t len)
-{
- uefi_blacklist_hash(source, data, len, "tbs:", 4);
-}
-
-/*
- * Blacklist the hash of an executable.
- */
-static __init void uefi_blacklist_binary(const char *source,
- const void *data, size_t len)
-{
- uefi_blacklist_hash(source, data, len, "bin:", 4);
-}
-
-/*
- * Return the appropriate handler for particular signature list types found in
- * the UEFI db and MokListRT tables.
- */
-static __init efi_element_handler_t get_handler_for_db(const efi_guid_t *
- sig_type)
-{
- if (efi_guidcmp(*sig_type, efi_cert_x509_guid) == 0)
- return add_to_platform_keyring;
- return 0;
-}
-
-/*
- * Return the appropriate handler for particular signature list types found in
- * the UEFI dbx and MokListXRT tables.
- */
-static __init efi_element_handler_t get_handler_for_dbx(const efi_guid_t *
- sig_type)
-{
- if (efi_guidcmp(*sig_type, efi_cert_x509_sha256_guid) == 0)
- return uefi_blacklist_x509_tbs;
- if (efi_guidcmp(*sig_type, efi_cert_sha256_guid) == 0)
- return uefi_blacklist_binary;
- return 0;
-}
-
/*
* Load the certs contained in the UEFI databases into the platform trusted
* keyring and the UEFI blacklisted X.509 cert SHA256 hashes into the blacklist
--
2.30.2
next prev parent reply other threads:[~2021-06-28 14:48 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-28 14:28 [PATCH 5.4 00/71] 5.4.129-rc1 review Sasha Levin
2021-06-28 14:28 ` [PATCH 5.4 01/71] module: limit enabling module.sig_enforce Sasha Levin
2021-06-28 14:28 ` [PATCH 5.4 02/71] Revert "drm/amdgpu/gfx9: fix the doorbell missing when in CGPG issue." Sasha Levin
2021-06-28 14:28 ` [PATCH 5.4 03/71] Revert "drm/amdgpu/gfx10: enlarge CP_MEC_DOORBELL_RANGE_UPPER to cover full doorbell." Sasha Levin
2021-06-28 14:28 ` [PATCH 5.4 04/71] drm/nouveau: wait for moving fence after pinning v2 Sasha Levin
2021-06-28 14:28 ` [PATCH 5.4 05/71] drm/radeon: wait for moving fence after pinning Sasha Levin
2021-06-28 14:28 ` [PATCH 5.4 06/71] ARM: 9081/1: fix gcc-10 thumb2-kernel regression Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 07/71] mmc: meson-gx: use memcpy_to/fromio for dram-access-quirk Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 08/71] kbuild: add CONFIG_LD_IS_LLD Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 09/71] arm64: link with -z norelro for LLD or aarch64-elf Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 10/71] MIPS: generic: Update node names to avoid unit addresses Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 11/71] spi: spi-nxp-fspi: move the register operation after the clock enable Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 12/71] Revert "PCI: PM: Do not read power state in pci_enable_device_flags()" Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 13/71] dmaengine: zynqmp_dma: Fix PM reference leak in zynqmp_dma_alloc_chan_resourc() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 14/71] mac80211: remove warning in ieee80211_get_sband() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 15/71] mac80211_hwsim: drop pending frames on stop Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 16/71] cfg80211: call cfg80211_leave_ocb when switching away from OCB Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 17/71] dmaengine: rcar-dmac: Fix PM reference leak in rcar_dmac_probe() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 18/71] dmaengine: mediatek: free the proper desc in desc_free handler Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 19/71] dmaengine: mediatek: do not issue a new desc if one is still current Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 20/71] dmaengine: mediatek: use GFP_NOWAIT instead of GFP_ATOMIC in prep_dma Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 21/71] net: ipv4: Remove unneed BUG() function Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 22/71] mac80211: drop multicast fragments Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 23/71] net: ethtool: clear heap allocations for ethtool function Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 24/71] ping: Check return value of function 'ping_queue_rcv_skb' Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 25/71] inet: annotate date races around sk->sk_txhash Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 26/71] net: phy: dp83867: perform soft reset and retain established link Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 27/71] net: caif: fix memory leak in ldisc_open Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 28/71] net/packet: annotate accesses to po->bind Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 29/71] net/packet: annotate accesses to po->ifindex Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 30/71] r8152: Avoid memcpy() over-reading of ETH_SS_STATS Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 31/71] sh_eth: " Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 32/71] r8169: " Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 33/71] KVM: selftests: Fix kvm_check_cap() assertion Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 34/71] net: qed: Fix memcpy() overflow of qed_dcbx_params() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 35/71] recordmcount: Correct st_shndx handling Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 36/71] PCI: Add AMD RS690 quirk to enable 64-bit DMA Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 37/71] net: ll_temac: Add memory-barriers for TX BD access Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 38/71] net: ll_temac: Avoid ndo_start_xmit returning NETDEV_TX_BUSY Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 39/71] pinctrl: stm32: fix the reported number of GPIO lines per bank Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 40/71] nilfs2: fix memory leak in nilfs_sysfs_delete_device_group Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 41/71] KVM: do not allow mapping valid but non-reference-counted pages Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 42/71] i2c: robotfuzz-osif: fix control-request directions Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 43/71] kthread_worker: split code for canceling the delayed work timer Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 44/71] kthread: prevent deadlock when kthread_mod_delayed_work() races with kthread_cancel_delayed_work_sync() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 45/71] mm: add VM_WARN_ON_ONCE_PAGE() macro Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 46/71] mm/rmap: remove unneeded semicolon in page_not_mapped() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 47/71] mm/rmap: use page_not_mapped in try_to_unmap() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 48/71] mm, thp: use head page in __migration_entry_wait() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 49/71] mm/thp: fix __split_huge_pmd_locked() on shmem migration entry Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 50/71] mm/thp: make is_huge_zero_pmd() safe and quicker Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 51/71] mm/thp: try_to_unmap() use TTU_SYNC for safe splitting Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 52/71] mm/thp: fix vma_address() if virtual address below file offset Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 53/71] mm/thp: fix page_address_in_vma() on file THP tails Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 54/71] mm/thp: unmap_mapping_page() to fix THP truncate_cleanup_page() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 55/71] mm: thp: replace DEBUG_VM BUG with VM_WARN when unmap fails for split Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 56/71] mm: page_vma_mapped_walk(): use page for pvmw->page Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 57/71] mm: page_vma_mapped_walk(): settle PageHuge on entry Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 58/71] mm: page_vma_mapped_walk(): use pmde for *pvmw->pmd Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 59/71] mm: page_vma_mapped_walk(): prettify PVMW_MIGRATION block Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 60/71] mm: page_vma_mapped_walk(): crossing page table boundary Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 61/71] mm: page_vma_mapped_walk(): add a level of indentation Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 62/71] mm: page_vma_mapped_walk(): use goto instead of while (1) Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 63/71] mm: page_vma_mapped_walk(): get vma_address_end() earlier Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 64/71] mm/thp: fix page_vma_mapped_walk() if THP mapped by ptes Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 65/71] mm/thp: another PVMW_SYNC fix in page_vma_mapped_walk() Sasha Levin
2021-06-28 14:29 ` [PATCH 5.4 66/71] mm, futex: fix shared futex pgoff on shmem huge page Sasha Levin
2021-06-28 14:30 ` [PATCH 5.4 67/71] certs: Add wrapper function to check blacklisted binary hash Sasha Levin
2021-06-28 14:30 ` Sasha Levin [this message]
2021-06-28 14:30 ` [PATCH 5.4 69/71] certs: Add EFI_CERT_X509_GUID support for dbx entries Sasha Levin
2021-06-28 14:30 ` [PATCH 5.4 70/71] certs: Move load_system_certificate_list to a common function Sasha Levin
2021-06-28 14:30 ` [PATCH 5.4 71/71] Linux 5.4.129-rc1 Sasha Levin
2021-06-28 20:57 ` [PATCH 5.4 00/71] 5.4.129-rc1 review Shuah Khan
2021-06-28 21:20 ` Sasha Levin
2021-06-29 6:11 ` Greg Kroah-Hartman
2021-06-29 6:11 ` Greg Kroah-Hartman
2021-06-29 14:00 ` Shuah Khan
2021-06-29 6:24 ` Samuel Zou
2021-06-29 8:39 ` Naresh Kamboju
2021-06-29 10:21 ` Jon Hunter
2021-06-29 12:05 ` Sudip Mukherjee
2021-06-29 18:20 ` Guenter Roeck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210628143004.32596-69-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=erichte@linux.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mpe@ellerman.id.au \
--cc=nayna@linux.ibm.com \
--cc=stable@vger.kernel.org \
--cc=zohar@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.