Browse code

kernel: Enable KEXEC_FILE for kernel signature verification with kexec

part 1/2 (Merged): Handled in x86_64 linux-generic
http://photon-jenkins.eng.vmware.com:8082/c/photon/+/21472

part 2/2: x86 - linux-rt, linux-secure. aarch - linux-generic
http://photon-jenkins.eng.vmware.com:8082/c/photon/+/21512

Change-Id: I83bc6134c4a0f4f9023f920372b67e8c9e88f3c5
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/c/photon/+/21512
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: Alexey Makhalov <amakhalov@vmware.com>
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/c/photon/+/22443
Reviewed-by: Keerthana K <keerthanak@vmware.com>
Tested-by: Ajay Kaher <akaher@vmware.com>

Kuntal Nayak authored on 2023/08/14 06:52:08
Showing 6 changed files
... ...
@@ -471,7 +471,11 @@ CONFIG_HZ_250=y
471 471
 CONFIG_HZ=250
472 472
 CONFIG_SCHED_HRTICK=y
473 473
 CONFIG_KEXEC=y
474
-# CONFIG_KEXEC_FILE is not set
474
+CONFIG_KEXEC_FILE=y
475
+CONFIG_ARCH_HAS_KEXEC_PURGATORY=y
476
+CONFIG_KEXEC_SIG=y
477
+CONFIG_KEXEC_SIG_FORCE=y
478
+CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
475 479
 CONFIG_CRASH_DUMP=y
476 480
 CONFIG_PHYSICAL_START=0x1000000
477 481
 CONFIG_RELOCATABLE=y
... ...
@@ -659,6 +663,7 @@ CONFIG_AS_TPAUSE=y
659 659
 #
660 660
 CONFIG_CRASH_CORE=y
661 661
 CONFIG_KEXEC_CORE=y
662
+CONFIG_HAVE_IMA_KEXEC=y
662 663
 CONFIG_HOTPLUG_SMT=y
663 664
 CONFIG_GENERIC_ENTRY=y
664 665
 CONFIG_KPROBES=y
... ...
@@ -6096,6 +6101,7 @@ CONFIG_INTEGRITY_PLATFORM_KEYRING=y
6096 6096
 CONFIG_LOAD_UEFI_KEYS=y
6097 6097
 CONFIG_INTEGRITY_AUDIT=y
6098 6098
 CONFIG_IMA=y
6099
+# CONFIG_IMA_KEXEC is not set
6099 6100
 CONFIG_IMA_MEASURE_PCR_IDX=10
6100 6101
 CONFIG_IMA_LSM_RULES=y
6101 6102
 CONFIG_IMA_NG_TEMPLATE=y
... ...
@@ -6108,6 +6114,7 @@ CONFIG_IMA_DEFAULT_HASH="sha256"
6108 6108
 # CONFIG_IMA_WRITE_POLICY is not set
6109 6109
 CONFIG_IMA_READ_POLICY=y
6110 6110
 # CONFIG_IMA_APPRAISE is not set
6111
+# CONFIG_IMA_ARCH_POLICY is not set
6111 6112
 CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y
6112 6113
 CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y
6113 6114
 # CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set
... ...
@@ -6180,8 +6187,8 @@ CONFIG_CRYPTO_MANAGER2=y
6180 6180
 # CONFIG_CRYPTO_USER is not set
6181 6181
 # CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
6182 6182
 # CONFIG_CRYPTO_MANAGER_EXTRA_TESTS is not set
6183
-CONFIG_CRYPTO_GF128MUL=m
6184
-CONFIG_CRYPTO_NULL=m
6183
+CONFIG_CRYPTO_GF128MUL=y
6184
+CONFIG_CRYPTO_NULL=y
6185 6185
 CONFIG_CRYPTO_NULL2=y
6186 6186
 # CONFIG_CRYPTO_PCRYPT is not set
6187 6187
 CONFIG_CRYPTO_CRYPTD=m
... ...
@@ -6196,9 +6203,9 @@ CONFIG_CRYPTO_SIMD=m
6196 6196
 #
6197 6197
 CONFIG_CRYPTO_RSA=y
6198 6198
 # CONFIG_CRYPTO_DH is not set
6199
-CONFIG_CRYPTO_ECC=m
6200
-CONFIG_CRYPTO_ECDH=m
6201
-CONFIG_CRYPTO_ECDSA=m
6199
+CONFIG_CRYPTO_ECC=y
6200
+CONFIG_CRYPTO_ECDH=y
6201
+CONFIG_CRYPTO_ECDSA=y
6202 6202
 # CONFIG_CRYPTO_ECRDSA is not set
6203 6203
 # CONFIG_CRYPTO_SM2 is not set
6204 6204
 # CONFIG_CRYPTO_CURVE25519 is not set
... ...
@@ -6232,9 +6239,9 @@ CONFIG_CRYPTO_DES=y
6232 6232
 CONFIG_CRYPTO_ARC4=m
6233 6233
 # CONFIG_CRYPTO_CHACHA20 is not set
6234 6234
 CONFIG_CRYPTO_CBC=y
6235
-CONFIG_CRYPTO_CFB=m
6236
-CONFIG_CRYPTO_CTR=m
6237
-CONFIG_CRYPTO_CTS=m
6235
+CONFIG_CRYPTO_CFB=y
6236
+CONFIG_CRYPTO_CTR=y
6237
+CONFIG_CRYPTO_CTS=y
6238 6238
 CONFIG_CRYPTO_ECB=y
6239 6239
 # CONFIG_CRYPTO_HCTR2 is not set
6240 6240
 # CONFIG_CRYPTO_KEYWRAP is not set
... ...
@@ -6249,8 +6256,8 @@ CONFIG_CRYPTO_XTS=y
6249 6249
 #
6250 6250
 # CONFIG_CRYPTO_AEGIS128 is not set
6251 6251
 # CONFIG_CRYPTO_CHACHA20POLY1305 is not set
6252
-CONFIG_CRYPTO_CCM=m
6253
-CONFIG_CRYPTO_GCM=m
6252
+CONFIG_CRYPTO_CCM=y
6253
+CONFIG_CRYPTO_GCM=y
6254 6254
 CONFIG_CRYPTO_SEQIV=m
6255 6255
 CONFIG_CRYPTO_ECHAINIV=m
6256 6256
 CONFIG_CRYPTO_ESSIV=m
... ...
@@ -6260,8 +6267,8 @@ CONFIG_CRYPTO_ESSIV=m
6260 6260
 # Hashes, digests, and MACs
6261 6261
 #
6262 6262
 CONFIG_CRYPTO_BLAKE2B=m
6263
-CONFIG_CRYPTO_CMAC=m
6264
-CONFIG_CRYPTO_GHASH=m
6263
+CONFIG_CRYPTO_CMAC=y
6264
+CONFIG_CRYPTO_GHASH=y
6265 6265
 CONFIG_CRYPTO_HMAC=y
6266 6266
 CONFIG_CRYPTO_MD4=m
6267 6267
 CONFIG_CRYPTO_MD5=y
... ...
@@ -6271,7 +6278,7 @@ CONFIG_CRYPTO_MD5=y
6271 6271
 CONFIG_CRYPTO_SHA1=y
6272 6272
 CONFIG_CRYPTO_SHA256=y
6273 6273
 CONFIG_CRYPTO_SHA512=y
6274
-CONFIG_CRYPTO_SHA3=m
6274
+CONFIG_CRYPTO_SHA3=y
6275 6275
 # CONFIG_CRYPTO_SM3_GENERIC is not set
6276 6276
 # CONFIG_CRYPTO_STREEBOG is not set
6277 6277
 # CONFIG_CRYPTO_VMAC is not set
... ...
@@ -6386,7 +6393,7 @@ CONFIG_X509_CERTIFICATE_PARSER=y
6386 6386
 # CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set
6387 6387
 CONFIG_PKCS7_MESSAGE_PARSER=y
6388 6388
 # CONFIG_PKCS7_TEST_KEY is not set
6389
-# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set
6389
+CONFIG_SIGNED_PE_FILE_VERIFICATION=y
6390 6390
 # CONFIG_FIPS_SIGNATURE_SELFTEST is not set
6391 6391
 
6392 6392
 #
... ...
@@ -6396,7 +6403,7 @@ CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
6396 6396
 CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
6397 6397
 # CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
6398 6398
 CONFIG_SYSTEM_TRUSTED_KEYRING=y
6399
-CONFIG_SYSTEM_TRUSTED_KEYS=""
6399
+CONFIG_SYSTEM_TRUSTED_KEYS="photon_sb2020.pem"
6400 6400
 # CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
6401 6401
 # CONFIG_SECONDARY_TRUSTED_KEYRING is not set
6402 6402
 CONFIG_SYSTEM_BLACKLIST_KEYRING=y
... ...
@@ -445,7 +445,11 @@ CONFIG_HZ_250=y
445 445
 CONFIG_HZ=250
446 446
 CONFIG_SCHED_HRTICK=y
447 447
 # CONFIG_KEXEC is not set
448
-# CONFIG_KEXEC_FILE is not set
448
+CONFIG_KEXEC_FILE=y
449
+CONFIG_ARCH_HAS_KEXEC_PURGATORY=y
450
+CONFIG_KEXEC_SIG=y
451
+CONFIG_KEXEC_SIG_FORCE=y
452
+CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
449 453
 CONFIG_CRASH_DUMP=y
450 454
 CONFIG_PHYSICAL_START=0x1000000
451 455
 CONFIG_RELOCATABLE=y
... ...
@@ -662,6 +666,8 @@ CONFIG_AS_TPAUSE=y
662 662
 #
663 663
 # General architecture-dependent options
664 664
 #
665
+CONFIG_CRASH_CORE=y
666
+CONFIG_KEXEC_CORE=y
665 667
 CONFIG_HOTPLUG_SMT=y
666 668
 CONFIG_GENERIC_ENTRY=y
667 669
 CONFIG_KPROBES=y
... ...
@@ -1858,6 +1864,7 @@ CONFIG_SYSFB_SIMPLEFB=y
1858 1858
 CONFIG_EFI_ESRT=y
1859 1859
 CONFIG_EFI_VARS_PSTORE=m
1860 1860
 # CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
1861
+CONFIG_EFI_RUNTIME_MAP=y
1861 1862
 # CONFIG_EFI_FAKE_MEMMAP is not set
1862 1863
 CONFIG_EFI_DXE_MEM_ATTRIBUTES=y
1863 1864
 CONFIG_EFI_RUNTIME_WRAPPERS=y
... ...
@@ -5303,7 +5310,7 @@ CONFIG_X509_CERTIFICATE_PARSER=y
5303 5303
 # CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set
5304 5304
 CONFIG_PKCS7_MESSAGE_PARSER=y
5305 5305
 # CONFIG_PKCS7_TEST_KEY is not set
5306
-# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set
5306
+CONFIG_SIGNED_PE_FILE_VERIFICATION=y
5307 5307
 # CONFIG_FIPS_SIGNATURE_SELFTEST is not set
5308 5308
 
5309 5309
 #
... ...
@@ -5313,7 +5320,7 @@ CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
5313 5313
 CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
5314 5314
 # CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
5315 5315
 CONFIG_SYSTEM_TRUSTED_KEYRING=y
5316
-CONFIG_SYSTEM_TRUSTED_KEYS=""
5316
+CONFIG_SYSTEM_TRUSTED_KEYS="photon_sb2020.pem"
5317 5317
 # CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
5318 5318
 # CONFIG_SECONDARY_TRUSTED_KEYRING is not set
5319 5319
 # CONFIG_SYSTEM_BLACKLIST_KEYRING is not set
... ...
@@ -398,7 +398,9 @@ CONFIG_CC_HAVE_SHADOW_CALL_STACK=y
398 398
 CONFIG_PARAVIRT=y
399 399
 # CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
400 400
 CONFIG_KEXEC=y
401
-# CONFIG_KEXEC_FILE is not set
401
+CONFIG_KEXEC_FILE=y
402
+CONFIG_KEXEC_SIG=y
403
+CONFIG_KEXEC_IMAGE_VERIFY_SIG=y
402 404
 CONFIG_CRASH_DUMP=y
403 405
 CONFIG_TRANS_TABLE=y
404 406
 CONFIG_HYPERVISOR_GUEST=y
... ...
@@ -631,6 +633,7 @@ CONFIG_KVM=y
631 631
 # General architecture-dependent options
632 632
 CONFIG_CRASH_CORE=y
633 633
 CONFIG_KEXEC_CORE=y
634
+CONFIG_HAVE_IMA_KEXEC=y
634 635
 CONFIG_ARCH_HAS_SUBPAGE_FAULTS=y
635 636
 CONFIG_KPROBES=y
636 637
 CONFIG_JUMP_LABEL=y
... ...
@@ -6992,6 +6995,7 @@ CONFIG_INTEGRITY_PLATFORM_KEYRING=y
6992 6992
 CONFIG_LOAD_UEFI_KEYS=y
6993 6993
 CONFIG_INTEGRITY_AUDIT=y
6994 6994
 CONFIG_IMA=y
6995
+# CONFIG_IMA_KEXEC is not set
6995 6996
 CONFIG_IMA_MEASURE_PCR_IDX=10
6996 6997
 CONFIG_IMA_LSM_RULES=y
6997 6998
 CONFIG_IMA_NG_TEMPLATE=y
... ...
@@ -7004,6 +7008,7 @@ CONFIG_IMA_DEFAULT_HASH="sha256"
7004 7004
 # CONFIG_IMA_WRITE_POLICY is not set
7005 7005
 CONFIG_IMA_READ_POLICY=y
7006 7006
 # CONFIG_IMA_APPRAISE is not set
7007
+# CONFIG_IMA_ARCH_POLICY is not set
7007 7008
 CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y
7008 7009
 CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y
7009 7010
 # CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set
... ...
@@ -7269,7 +7274,7 @@ CONFIG_X509_CERTIFICATE_PARSER=y
7269 7269
 # CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set
7270 7270
 CONFIG_PKCS7_MESSAGE_PARSER=y
7271 7271
 # CONFIG_PKCS7_TEST_KEY is not set
7272
-# CONFIG_SIGNED_PE_FILE_VERIFICATION is not set
7272
+CONFIG_SIGNED_PE_FILE_VERIFICATION=y
7273 7273
 # CONFIG_FIPS_SIGNATURE_SELFTEST is not set
7274 7274
 
7275 7275
 # Certificates for signature checking
... ...
@@ -7277,7 +7282,7 @@ CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
7277 7277
 CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
7278 7278
 # CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
7279 7279
 CONFIG_SYSTEM_TRUSTED_KEYRING=y
7280
-CONFIG_SYSTEM_TRUSTED_KEYS=""
7280
+CONFIG_SYSTEM_TRUSTED_KEYS="photon_sb2020.pem"
7281 7281
 # CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
7282 7282
 # CONFIG_SECONDARY_TRUSTED_KEYRING is not set
7283 7283
 CONFIG_SYSTEM_BLACKLIST_KEYRING=y
... ...
@@ -16,7 +16,7 @@
16 16
 Summary:        Kernel
17 17
 Name:           linux-rt
18 18
 Version:        6.1.41
19
-Release:        3%{?kat_build:.kat}%{?dist}
19
+Release:        4%{?kat_build:.kat}%{?dist}
20 20
 License:        GPLv2
21 21
 URL:            http://www.kernel.org
22 22
 Group:          System Environment/Kernel
... ...
@@ -67,6 +67,8 @@ Source19:        spec_install_post.inc
67 67
 
68 68
 Source20:       %{name}-dracut.conf
69 69
 
70
+Source21:       photon_sb2020.pem
71
+
70 72
 # common
71 73
 Patch0: net-Double-tcp_mem-limits.patch
72 74
 Patch1: SUNRPC-xs_bind-uses-ip_local_reserved_ports.patch
... ...
@@ -336,6 +338,7 @@ popd
336 336
 
337 337
 %build
338 338
 make %{?_smp_mflags} mrproper
339
+cp %{SOURCE21} photon_sb2020.pem
339 340
 
340 341
 %ifarch x86_64
341 342
 cp %{SOURCE1} .config
... ...
@@ -517,6 +520,8 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
517 517
 %{_usrsrc}/linux-headers-%{uname_r}
518 518
 
519 519
 %changelog
520
+* Wed Nov 22 2023 Kuntal Nayak <nkuntal@vmware.com> 6.1.41-4
521
+- Enable Kconfig CONFIG_KEXEC_FILE for kexec signature verify
520 522
 * Wed Nov 22 2023 Srish Srinivasan <ssrish@vmware.com> 6.1.41-3
521 523
 - Enable CONFIG_DEBUG_INFO_BTF=y
522 524
 * Wed Nov 22 2023 Ajay Kaher <akaher@vmware.com> 6.1.41-2
... ...
@@ -16,7 +16,7 @@
16 16
 Summary:        Kernel
17 17
 Name:           linux-secure
18 18
 Version:        6.1.41
19
-Release:        2%{?kat_build:.kat}%{?dist}
19
+Release:        3%{?kat_build:.kat}%{?dist}
20 20
 License:        GPLv2
21 21
 URL:            http://www.kernel.org
22 22
 Group:          System Environment/Kernel
... ...
@@ -59,6 +59,8 @@ Source28: testmgr_fips_canister_wrapper.c
59 59
 Source29: spec_install_post.inc
60 60
 Source30: %{name}-dracut.conf
61 61
 
62
+Source31:       photon_sb2020.pem
63
+
62 64
 # common
63 65
 Patch0:  net-Double-tcp_mem-limits.patch
64 66
 Patch1:  SUNRPC-xs_bind-uses-ip_local_reserved_ports.patch
... ...
@@ -101,6 +103,7 @@ Patch42: 0001-kernel-lockdown-when-UEFI-secure-boot-enabled.patch
101 101
 Patch51: 0002-NOWRITEEXEC-and-PAX-features-MPROTECT-EMUTRAMP.patch
102 102
 Patch52: 0003-gcc-rap-plugin-with-kcfi.patch
103 103
 Patch53: 0004-Fix-PAX-function-pointer-overwritten-for-tasklet-cal.patch
104
+Patch54: fix-warn-definition.patch
104 105
 
105 106
 # SEV-ES, TDX
106 107
 %ifarch x86_64
... ...
@@ -229,7 +232,7 @@ The kernel fips-canister
229 229
 %endif
230 230
 
231 231
 #Secure
232
-%autopatch -p1 -m50 -M53
232
+%autopatch -p1 -m50 -M54
233 233
 
234 234
 %ifarch x86_64
235 235
 #SEV-ES, TDX
... ...
@@ -256,6 +259,7 @@ The kernel fips-canister
256 256
 %build
257 257
 make %{?_smp_mflags} mrproper
258 258
 cp %{SOURCE1} .config
259
+cp %{SOURCE31} photon_sb2020.pem
259 260
 %if 0%{?fips}
260 261
 cp ../fips-canister-%{fips_canister_version}/fips_canister.o \
261 262
    ../fips-canister-%{fips_canister_version}/fips_canister_wrapper.c \
... ...
@@ -424,6 +428,8 @@ ln -sf linux-%{uname_r}.cfg /boot/photon.cfg
424 424
 %endif
425 425
 
426 426
 %changelog
427
+* Wed Nov 22 2023 Kuntal Nayak <nkuntal@vmware.com> 6.1.41-3
428
+- Enable Kconfig CONFIG_KEXEC_FILE for kexec signature verify
427 429
 * Wed Nov 22 2023 Ajay Kaher <akaher@vmware.com> 6.1.41-2
428 430
 - Fix: unconditional preserve CR4.MCE
429 431
 * Wed Nov 22 2023 Ashwin Dayanand Kamat <kashwindayan@vmware.com> 6.1.41-1
430 432
new file mode 100644
... ...
@@ -0,0 +1,62 @@
0
+From 2c3dd15357b628de25b2dd2ffeab55f5b2837f68 Mon Sep 17 00:00:00 2001
1
+From: Kuntal Nayak <nkuntal@vmware.com>
2
+Date: Mon, 7 Aug 2023 23:57:44 +0000
3
+Subject: [PATCH] fix conflicting definition of warn()
4
+
5
+RAP uses function signature (ret type, args) to create hash objects
6
+during compilation. arch/x86/purgatory/ has two definitions
7
+of warn() and generates two __rap_hash_warn. This results
8
+in failure of linking 'purgatory'. Please find details of
9
+conflicting objects below.
10
+
11
+#  nm purgatory.o | grep warn
12
+0000000000000170 T __cfi_warn
13
+000000006c29e01a A __rap_hash_warn
14
+0000000000000179 T warn
15
+
16
+# nm string.o | grep warn
17
+0000000058cf6023 A __rap_hash_warn
18
+                 U warn
19
+
20
+Fixing the definition used by 'string' to create matching
21
+signature of warn function for the directory.
22
+
23
+Modifying the definition in 'string' because it uses __putstr
24
+having <const char *> argument.
25
+arch/x86/boot/compressed/misc.h:56
26
+void __putstr(const char *s);
27
+
28
+---
29
+ arch/x86/boot/compressed/error.c | 2 +-
30
+ arch/x86/boot/compressed/error.h | 2 +-
31
+ 2 files changed, 2 insertions(+), 2 deletions(-)
32
+
33
+diff --git a/arch/x86/boot/compressed/error.c b/arch/x86/boot/compressed/error.c
34
+index c881878e5..ce5ed7d82 100644
35
+--- a/arch/x86/boot/compressed/error.c
36
+@@ -7,7 +7,7 @@
37
+ #include "misc.h"
38
+ #include "error.h"
39
+ 
40
+-void warn(char *m)
41
++void warn(const char *m)
42
+ {
43
+ 	error_putstr("\n\n");
44
+ 	error_putstr(m);
45
+diff --git a/arch/x86/boot/compressed/error.h b/arch/x86/boot/compressed/error.h
46
+index 1de582118..87062dea9 100644
47
+--- a/arch/x86/boot/compressed/error.h
48
+@@ -4,7 +4,7 @@
49
+ 
50
+ #include <linux/compiler.h>
51
+ 
52
+-void warn(char *m);
53
++void warn(const char *m);
54
+ void error(char *m) __noreturn;
55
+ 
56
+ #endif /* BOOT_COMPRESSED_ERROR_H */
57
+-- 
58
+2.39.0
59
+