Skip to contentSkip to conversation

FAILED: patch "[PATCH] Fix kexec forbidding kernels signed with keys in the" failed to apply to 4.9-stable tree

PATCH New [email protected] 2 participants 7 messages Sep 7, 2018

Subsystems (5)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

Quoted 1 line

From ea93102f32244e3f45c8b26260be77ed0cc1d16c Mon Sep 17 00:00:00 2001

From: Yannik Sembritzki <[email protected]>
Date: Thu, 16 Aug 2018 14:05:23 +0100
Subject: [PATCH] Fix kexec forbidding kernels signed with keys in the
secondary keyring to boot

The split of .system_keyring into .builtin_trusted_keys and .secondary_trusted_keys broke kexec, thereby preventing kernels signed by keys which are now in the secondary keyring from being kexec'd.

Fix this by passing VERIFY_USE_SECONDARY_KEYRING to verify_pefile_signature().

Fixes d3bfe84129f6 ("certs: Add a secondary system keyring that can be added to dynamically")
arch/x86/kernel/kexec-bzimage64.c +1 -1
index 7326078eaa7a..278cd07228dd 100644
@@ -532,7 +532,7 @@ static int bzImage64_cleanup(void *loader_data)
 static int bzImage64_verify_sig(const char *kernel, unsigned long kernel_len)
 {
 	return verify_pefile_signature(kernel, kernel_len,
-				       NULL,
+				       VERIFY_USE_SECONDARY_KEYRING,
 				       VERIFYING_KEXEC_PE_SIGNATURE);
 }
 #endif
#1 lore raw

This patch applies cleanly for me on the linux-4.9.y branch. Could you tell me what the problem is here?

Yannik

Quoted 47 lines · On 07.09.2018 11:14, [email protected] wrote:

The patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From ea93102f32244e3f45c8b26260be77ed0cc1d16c Mon Sep 17 00:00:00 2001
From: Yannik Sembritzki <[email protected]>
Date: Thu, 16 Aug 2018 14:05:23 +0100
Subject: [PATCH] Fix kexec forbidding kernels signed with keys in the
secondary keyring to boot

The split of .system_keyring into .builtin_trusted_keys and .secondary_trusted_keys broke kexec, thereby preventing kernels signed by keys which are now in the secondary keyring from being kexec'd.

Fix this by passing VERIFY_USE_SECONDARY_KEYRING to verify_pefile_signature().

Fixes d3bfe84129f6 ("certs: Add a secondary system keyring that can be added to dynamically")
arch/x86/kernel/kexec-bzimage64.c +1 -1
index 7326078eaa7a..278cd07228dd 100644
@@ -532,7 +532,7 @@ static int bzImage64_cleanup(void *loader_data)
 static int bzImage64_verify_sig(const char *kernel, unsigned long kernel_len)
 {
 	return verify_pefile_signature(kernel, kernel_len,
-				       NULL,
+				       VERIFY_USE_SECONDARY_KEYRING,
 				       VERIFYING_KEXEC_PE_SIGNATURE);
 }
 #endif
author maintainer
#2 lore raw
Quoted 2 lines · Yannik Sembritzki

This patch applies cleanly for me on the linux-4.9.y branch. Could you tell me what the problem is here?

The dependant patch fails to apply, so this one fails to build, sorry for not being more obviuos about this.

So a backport of both is needed here.

thanks,

greg k-h

#3 lore raw

Thanks, Greg.

I've backported the other (dependant) patch to 4.9; do I need to do anything more to also get this one applied to 4.9?

Yannik

Quoted 11 lines · Greg KH
Quoted 2 lines · Yannik Sembritzki

This patch applies cleanly for me on the linux-4.9.y branch. Could you tell me what the problem is here?

The dependant patch fails to apply, so this one fails to build, sorry for not being more obviuos about this.

So a backport of both is needed here.

thanks,

greg k-h

author maintainer
#4 lore raw
Quoted 4 lines · Yannik Sembritzki

Thanks, Greg.

I've backported the other (dependant) patch to 4.9; do I need to do anything more to also get this one applied to 4.9?

Yes, that one did not work :(

Can you resend the patch series, backported to 4.9, with the git ids of the original patches in them somewhere so I know what to do?

thanks,

greg k-h

#5 lore raw

PATCH 1/2 Replace the use of a magic number that indicates that verify_*_signature() should use the secondary keyring with a symbol.

Backport of 817aef260037f33ee0f44c17fe341323d3aebd6d

---
 certs/system_keyring.c                  | 3 ++-
 crypto/asymmetric_keys/pkcs7_key_type.c | 2 +-
 include/linux/verification.h            | 6 ++++++
 3 files changed, 9 insertions(+), 2 deletions(-)
certs/system_keyring.c +2 -1
index 50979d6d..24766505 100644
@@ -14,6 +14,7 @@
 #include <linux/sched.h>
 #include <linux/cred.h>
 #include <linux/err.h>
+#include <linux/verification.h>
 #include <keys/asymmetric-type.h>
 #include <keys/system_keyring.h>
 #include <crypto/pkcs7.h>
@@ -207,7 +208,7 @@ int verify_pkcs7_signature(const void *data, size_t len,
 
 	if (!trusted_keys) {
 		trusted_keys = builtin_trusted_keys;
-	} else if (trusted_keys == (void *)1UL) {
+	} else if (trusted_keys == VERIFY_USE_SECONDARY_KEYRING) {
 #ifdef CONFIG_SECONDARY_TRUSTED_KEYRING
 		trusted_keys = secondary_trusted_keys;
 #else
crypto/asymmetric_keys/pkcs7_key_type.c +1 -1
index 1063b644..b2aa925a 100644
@@ -62,7 +62,7 @@ static int pkcs7_preparse(struct key_preparsed_payload *prep)
 
 	return verify_pkcs7_signature(NULL, 0,
 				      prep->data, prep->datalen,
-				      (void *)1UL, usage,
+				      VERIFY_USE_SECONDARY_KEYRING, usage,
 				      pkcs7_view_content, prep);
 }
 
include/linux/verification.h +6 -0
index a10549a6..cfa4730d 100644
@@ -12,6 +12,12 @@
 #ifndef _LINUX_VERIFICATION_H
 #define _LINUX_VERIFICATION_H
 
+/*
+ * Indicate that both builtin trusted keys and secondary trusted keys
+ * should be used.
+ */
+#define VERIFY_USE_SECONDARY_KEYRING ((struct key *)1UL)
+
 /*
  * The use to which an asymmetric key is being put.
  */
Signature · 1 line
2.17.1
#6 lore raw

PATCH 2/2 The split of .system_keyring into .builtin_trusted_keys and .secondary_trusted_keys broke kexec, thereby preventing kernels signed by keys which are now in the secondary keyring from being kexec'd.

Fix this by passing VERIFY_USE_SECONDARY_KEYRING to verify_pefile_signature().

Backport of ea93102f32244e3f45c8b26260be77ed0cc1d16c

---
 arch/x86/kernel/kexec-bzimage64.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/kernel/kexec-bzimage64.c +1 -1
index 3407b148..490f9be3 100644
@@ -529,7 +529,7 @@ static int bzImage64_cleanup(void *loader_data)
 static int bzImage64_verify_sig(const char *kernel, unsigned long kernel_len)
 {
 	return verify_pefile_signature(kernel, kernel_len,
-				       NULL,
+				       VERIFY_USE_SECONDARY_KEYRING,
 				       VERIFYING_KEXEC_PE_SIGNATURE);
 }
 #endif
Signature · 1 line
2.17.1