summaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorThiago Jung Bauermann <bauerman@linux.ibm.com>2019-07-04 14:57:34 -0400
committerMimi Zohar <zohar@linux.ibm.com>2019-08-05 18:39:56 -0400
commitc8424e776b093280d3fdd104d850706b3b229ac8 (patch)
tree3f14381fe576439fa1fa94736b67d1015c40752d /arch/s390
parentb36f281f4a314de4be0a51d6511b794691f8a244 (diff)
MODSIGN: Export module signature definitions
IMA will use the module_signature format for append signatures, so export the relevant definitions and factor out the code which verifies that the appended signature trailer is valid. Also, create a CONFIG_MODULE_SIG_FORMAT option so that IMA can select it and be able to use mod_check_sig() without having to depend on either CONFIG_MODULE_SIG or CONFIG_MODULES. s390 duplicated the definition of struct module_signature so now they can use the new <linux/module_signature.h> header instead. Signed-off-by: Thiago Jung Bauermann <bauerman@linux.ibm.com> Acked-by: Jessica Yu <jeyu@kernel.org> Reviewed-by: Philipp Rudo <prudo@linux.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/Kconfig2
-rw-r--r--arch/s390/kernel/machine_kexec_file.c24
2 files changed, 2 insertions, 24 deletions
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig
index a4ad2733eedf..e0ae0d51f985 100644
--- a/arch/s390/Kconfig
+++ b/arch/s390/Kconfig
@@ -538,7 +538,7 @@ config ARCH_HAS_KEXEC_PURGATORY
538 538
539config KEXEC_VERIFY_SIG 539config KEXEC_VERIFY_SIG
540 bool "Verify kernel signature during kexec_file_load() syscall" 540 bool "Verify kernel signature during kexec_file_load() syscall"
541 depends on KEXEC_FILE && SYSTEM_DATA_VERIFICATION 541 depends on KEXEC_FILE && MODULE_SIG_FORMAT
542 help 542 help
543 This option makes kernel signature verification mandatory for 543 This option makes kernel signature verification mandatory for
544 the kexec_file_load() syscall. 544 the kexec_file_load() syscall.
diff --git a/arch/s390/kernel/machine_kexec_file.c b/arch/s390/kernel/machine_kexec_file.c
index fbdd3ea73667..1ac9fbc6e01e 100644
--- a/arch/s390/kernel/machine_kexec_file.c
+++ b/arch/s390/kernel/machine_kexec_file.c
@@ -10,7 +10,7 @@
10#include <linux/elf.h> 10#include <linux/elf.h>
11#include <linux/errno.h> 11#include <linux/errno.h>
12#include <linux/kexec.h> 12#include <linux/kexec.h>
13#include <linux/module.h> 13#include <linux/module_signature.h>
14#include <linux/verification.h> 14#include <linux/verification.h>
15#include <asm/boot_data.h> 15#include <asm/boot_data.h>
16#include <asm/ipl.h> 16#include <asm/ipl.h>
@@ -23,28 +23,6 @@ const struct kexec_file_ops * const kexec_file_loaders[] = {
23}; 23};
24 24
25#ifdef CONFIG_KEXEC_VERIFY_SIG 25#ifdef CONFIG_KEXEC_VERIFY_SIG
26/*
27 * Module signature information block.
28 *
29 * The constituents of the signature section are, in order:
30 *
31 * - Signer's name
32 * - Key identifier
33 * - Signature data
34 * - Information block
35 */
36struct module_signature {
37 u8 algo; /* Public-key crypto algorithm [0] */
38 u8 hash; /* Digest algorithm [0] */
39 u8 id_type; /* Key identifier type [PKEY_ID_PKCS7] */
40 u8 signer_len; /* Length of signer's name [0] */
41 u8 key_id_len; /* Length of key identifier [0] */
42 u8 __pad[3];
43 __be32 sig_len; /* Length of signature data */
44};
45
46#define PKEY_ID_PKCS7 2
47
48int s390_verify_sig(const char *kernel, unsigned long kernel_len) 26int s390_verify_sig(const char *kernel, unsigned long kernel_len)
49{ 27{
50 const unsigned long marker_len = sizeof(MODULE_SIG_STRING) - 1; 28 const unsigned long marker_len = sizeof(MODULE_SIG_STRING) - 1;