* [PATCH V34 06/29] kexec_load: Disable at runtime if the kernel is locked down [not found] <20190622000358.19895-1-matthewgarrett@google.com> @ 2019-06-22 0:03 ` Matthew Garrett 2019-06-22 23:52 ` Kees Cook 2019-06-22 0:03 ` [PATCH V34 07/29] Copy secure_boot flag in boot params across kexec reboot Matthew Garrett ` (2 subsequent siblings) 3 siblings, 1 reply; 13+ messages in thread From: Matthew Garrett @ 2019-06-22 0:03 UTC (permalink / raw) To: jmorris Cc: Matthew Garrett, linux-api, kexec, linux-kernel, Matthew Garrett, David Howells, linux-security-module, Dave Young From: Matthew Garrett <mjg59@srcf.ucam.org> The kexec_load() syscall permits the loading and execution of arbitrary code in ring 0, which is something that lock-down is meant to prevent. It makes sense to disable kexec_load() in this situation. This does not affect kexec_file_load() syscall which can check for a signature on the image to be booted. Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Matthew Garrett <mjg59@google.com> Acked-by: Dave Young <dyoung@redhat.com> cc: kexec@lists.infradead.org --- include/linux/security.h | 1 + kernel/kexec.c | 8 ++++++++ security/lockdown/lockdown.c | 1 + 3 files changed, 10 insertions(+) diff --git a/include/linux/security.h b/include/linux/security.h index 200175c8605a..00a31ab2e5ba 100644 --- a/include/linux/security.h +++ b/include/linux/security.h @@ -84,6 +84,7 @@ enum lockdown_reason { LOCKDOWN_NONE, LOCKDOWN_MODULE_SIGNATURE, LOCKDOWN_DEV_MEM, + LOCKDOWN_KEXEC, LOCKDOWN_INTEGRITY_MAX, LOCKDOWN_CONFIDENTIALITY_MAX, }; diff --git a/kernel/kexec.c b/kernel/kexec.c index 68559808fdfa..ec3f07a4b1c0 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -207,6 +207,14 @@ static inline int kexec_load_check(unsigned long nr_segments, if (result < 0) return result; + /* + * kexec can be used to circumvent module loading restrictions, so + * prevent loading in that case + */ + result = security_locked_down(LOCKDOWN_KEXEC); + if (result) + return result; + /* * Verify we have a legal set of flags * This leaves us room for future extensions. diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c index 565c87451f0f..08fcd8116db3 100644 --- a/security/lockdown/lockdown.c +++ b/security/lockdown/lockdown.c @@ -20,6 +20,7 @@ static char *lockdown_reasons[LOCKDOWN_CONFIDENTIALITY_MAX+1] = { [LOCKDOWN_NONE] = "none", [LOCKDOWN_MODULE_SIGNATURE] = "unsigned module loading", [LOCKDOWN_DEV_MEM] = "/dev/mem,kmem,port", + [LOCKDOWN_KEXEC] = "kexec of unsigned images", [LOCKDOWN_INTEGRITY_MAX] = "integrity", [LOCKDOWN_CONFIDENTIALITY_MAX] = "confidentiality", }; -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH V34 06/29] kexec_load: Disable at runtime if the kernel is locked down 2019-06-22 0:03 ` [PATCH V34 06/29] kexec_load: Disable at runtime if the kernel is locked down Matthew Garrett @ 2019-06-22 23:52 ` Kees Cook 0 siblings, 0 replies; 13+ messages in thread From: Kees Cook @ 2019-06-22 23:52 UTC (permalink / raw) To: Matthew Garrett Cc: Matthew Garrett, linux-api, kexec, jmorris, Matthew Garrett, linux-kernel, David Howells, linux-security-module, Dave Young On Fri, Jun 21, 2019 at 05:03:35PM -0700, Matthew Garrett wrote: > From: Matthew Garrett <mjg59@srcf.ucam.org> > > The kexec_load() syscall permits the loading and execution of arbitrary > code in ring 0, which is something that lock-down is meant to prevent. It > makes sense to disable kexec_load() in this situation. > > This does not affect kexec_file_load() syscall which can check for a > signature on the image to be booted. > > Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Kees Cook <keescook@chromium.org> -Kees > Signed-off-by: Matthew Garrett <mjg59@google.com> > Acked-by: Dave Young <dyoung@redhat.com> > cc: kexec@lists.infradead.org > --- > include/linux/security.h | 1 + > kernel/kexec.c | 8 ++++++++ > security/lockdown/lockdown.c | 1 + > 3 files changed, 10 insertions(+) > > diff --git a/include/linux/security.h b/include/linux/security.h > index 200175c8605a..00a31ab2e5ba 100644 > --- a/include/linux/security.h > +++ b/include/linux/security.h > @@ -84,6 +84,7 @@ enum lockdown_reason { > LOCKDOWN_NONE, > LOCKDOWN_MODULE_SIGNATURE, > LOCKDOWN_DEV_MEM, > + LOCKDOWN_KEXEC, > LOCKDOWN_INTEGRITY_MAX, > LOCKDOWN_CONFIDENTIALITY_MAX, > }; > diff --git a/kernel/kexec.c b/kernel/kexec.c > index 68559808fdfa..ec3f07a4b1c0 100644 > --- a/kernel/kexec.c > +++ b/kernel/kexec.c > @@ -207,6 +207,14 @@ static inline int kexec_load_check(unsigned long nr_segments, > if (result < 0) > return result; > > + /* > + * kexec can be used to circumvent module loading restrictions, so > + * prevent loading in that case > + */ > + result = security_locked_down(LOCKDOWN_KEXEC); > + if (result) > + return result; > + > /* > * Verify we have a legal set of flags > * This leaves us room for future extensions. > diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c > index 565c87451f0f..08fcd8116db3 100644 > --- a/security/lockdown/lockdown.c > +++ b/security/lockdown/lockdown.c > @@ -20,6 +20,7 @@ static char *lockdown_reasons[LOCKDOWN_CONFIDENTIALITY_MAX+1] = { > [LOCKDOWN_NONE] = "none", > [LOCKDOWN_MODULE_SIGNATURE] = "unsigned module loading", > [LOCKDOWN_DEV_MEM] = "/dev/mem,kmem,port", > + [LOCKDOWN_KEXEC] = "kexec of unsigned images", > [LOCKDOWN_INTEGRITY_MAX] = "integrity", > [LOCKDOWN_CONFIDENTIALITY_MAX] = "confidentiality", > }; > -- > 2.22.0.410.gd8fdbe21b5-goog > -- Kees Cook _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH V34 07/29] Copy secure_boot flag in boot params across kexec reboot [not found] <20190622000358.19895-1-matthewgarrett@google.com> 2019-06-22 0:03 ` [PATCH V34 06/29] kexec_load: Disable at runtime if the kernel is locked down Matthew Garrett @ 2019-06-22 0:03 ` Matthew Garrett 2019-06-22 23:53 ` Kees Cook 2019-06-22 0:03 ` [PATCH V34 08/29] kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE Matthew Garrett 2019-06-22 0:03 ` [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down Matthew Garrett 3 siblings, 1 reply; 13+ messages in thread From: Matthew Garrett @ 2019-06-22 0:03 UTC (permalink / raw) To: jmorris Cc: linux-api, kexec, linux-kernel, Matthew Garrett, David Howells, linux-security-module, Dave Young From: Dave Young <dyoung@redhat.com> Kexec reboot in case secure boot being enabled does not keep the secure boot mode in new kernel, so later one can load unsigned kernel via legacy kexec_load. In this state, the system is missing the protections provided by secure boot. Adding a patch to fix this by retain the secure_boot flag in original kernel. secure_boot flag in boot_params is set in EFI stub, but kexec bypasses the stub. Fixing this issue by copying secure_boot flag across kexec reboot. Signed-off-by: Dave Young <dyoung@redhat.com> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Matthew Garrett <mjg59@google.com> cc: kexec@lists.infradead.org --- arch/x86/kernel/kexec-bzimage64.c | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c index 22f60dd26460..4243359ac509 100644 --- a/arch/x86/kernel/kexec-bzimage64.c +++ b/arch/x86/kernel/kexec-bzimage64.c @@ -182,6 +182,7 @@ setup_efi_state(struct boot_params *params, unsigned long params_load_addr, if (efi_enabled(EFI_OLD_MEMMAP)) return 0; + params->secure_boot = boot_params.secure_boot; ei->efi_loader_signature = current_ei->efi_loader_signature; ei->efi_systab = current_ei->efi_systab; ei->efi_systab_hi = current_ei->efi_systab_hi; -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH V34 07/29] Copy secure_boot flag in boot params across kexec reboot 2019-06-22 0:03 ` [PATCH V34 07/29] Copy secure_boot flag in boot params across kexec reboot Matthew Garrett @ 2019-06-22 23:53 ` Kees Cook 0 siblings, 0 replies; 13+ messages in thread From: Kees Cook @ 2019-06-22 23:53 UTC (permalink / raw) To: Matthew Garrett Cc: linux-api, kexec, jmorris, Matthew Garrett, linux-kernel, David Howells, linux-security-module, Dave Young On Fri, Jun 21, 2019 at 05:03:36PM -0700, Matthew Garrett wrote: > From: Dave Young <dyoung@redhat.com> > > Kexec reboot in case secure boot being enabled does not keep the secure > boot mode in new kernel, so later one can load unsigned kernel via legacy > kexec_load. In this state, the system is missing the protections provided > by secure boot. > > Adding a patch to fix this by retain the secure_boot flag in original > kernel. > > secure_boot flag in boot_params is set in EFI stub, but kexec bypasses the > stub. Fixing this issue by copying secure_boot flag across kexec reboot. > > Signed-off-by: Dave Young <dyoung@redhat.com> Reviewed-by: Kees Cook <keescook@chromium.org> -Kees > Signed-off-by: David Howells <dhowells@redhat.com> > Signed-off-by: Matthew Garrett <mjg59@google.com> > cc: kexec@lists.infradead.org > --- > arch/x86/kernel/kexec-bzimage64.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/arch/x86/kernel/kexec-bzimage64.c b/arch/x86/kernel/kexec-bzimage64.c > index 22f60dd26460..4243359ac509 100644 > --- a/arch/x86/kernel/kexec-bzimage64.c > +++ b/arch/x86/kernel/kexec-bzimage64.c > @@ -182,6 +182,7 @@ setup_efi_state(struct boot_params *params, unsigned long params_load_addr, > if (efi_enabled(EFI_OLD_MEMMAP)) > return 0; > > + params->secure_boot = boot_params.secure_boot; > ei->efi_loader_signature = current_ei->efi_loader_signature; > ei->efi_systab = current_ei->efi_systab; > ei->efi_systab_hi = current_ei->efi_systab_hi; > -- > 2.22.0.410.gd8fdbe21b5-goog > -- Kees Cook _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH V34 08/29] kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE [not found] <20190622000358.19895-1-matthewgarrett@google.com> 2019-06-22 0:03 ` [PATCH V34 06/29] kexec_load: Disable at runtime if the kernel is locked down Matthew Garrett 2019-06-22 0:03 ` [PATCH V34 07/29] Copy secure_boot flag in boot params across kexec reboot Matthew Garrett @ 2019-06-22 0:03 ` Matthew Garrett 2019-06-24 2:01 ` Dave Young 2019-06-22 0:03 ` [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down Matthew Garrett 3 siblings, 1 reply; 13+ messages in thread From: Matthew Garrett @ 2019-06-22 0:03 UTC (permalink / raw) To: jmorris Cc: Jiri Bohac, linux-api, kexec, linux-kernel, Matthew Garrett, David Howells, linux-security-module From: Jiri Bohac <jbohac@suse.cz> This is a preparatory patch for kexec_file_load() lockdown. A locked down kernel needs to prevent unsigned kernel images from being loaded with kexec_file_load(). Currently, the only way to force the signature verification is compiling with KEXEC_VERIFY_SIG. This prevents loading usigned images even when the kernel is not locked down at runtime. This patch splits KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE. Analogous to the MODULE_SIG and MODULE_SIG_FORCE for modules, KEXEC_SIG turns on the signature verification but allows unsigned images to be loaded. KEXEC_SIG_FORCE disallows images without a valid signature. [Modified by David Howells such that: (1) verify_pefile_signature() differentiates between no-signature and sig-didn't-match in its returned errors. (2) kexec fails with EKEYREJECTED if there is a signature for which we have a key, but signature doesn't match - even if in non-forcing mode. (3) kexec fails with EBADMSG or some other error if there is a signature which cannot be parsed - even if in non-forcing mode. (4) kexec fails with ELIBBAD if the PE file cannot be parsed to extract the signature - even if in non-forcing mode. ] Signed-off-by: Jiri Bohac <jbohac@suse.cz> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Matthew Garrett <mjg59@google.com> Reviewed-by: Jiri Bohac <jbohac@suse.cz> cc: kexec@lists.infradead.org --- arch/x86/Kconfig | 20 ++++++++--- crypto/asymmetric_keys/verify_pefile.c | 4 ++- include/linux/kexec.h | 4 +-- kernel/kexec_file.c | 47 ++++++++++++++++++++++---- 4 files changed, 60 insertions(+), 15 deletions(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index c1f9b3cf437c..84381dd60760 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2012,20 +2012,30 @@ config KEXEC_FILE config ARCH_HAS_KEXEC_PURGATORY def_bool KEXEC_FILE -config KEXEC_VERIFY_SIG +config KEXEC_SIG bool "Verify kernel signature during kexec_file_load() syscall" depends on KEXEC_FILE ---help--- - This option makes kernel signature verification mandatory for - the kexec_file_load() syscall. - In addition to that option, you need to enable signature + This option makes the kexec_file_load() syscall check for a valid + signature of the kernel image. The image can still be loaded without + a valid signature unless you also enable KEXEC_SIG_FORCE, though if + there's a signature that we can check, then it must be valid. + + In addition to this option, you need to enable signature verification for the corresponding kernel image type being loaded in order for this to work. +config KEXEC_SIG_FORCE + bool "Require a valid signature in kexec_file_load() syscall" + depends on KEXEC_SIG + ---help--- + This option makes kernel signature verification mandatory for + the kexec_file_load() syscall. + config KEXEC_BZIMAGE_VERIFY_SIG bool "Enable bzImage signature verification support" - depends on KEXEC_VERIFY_SIG + depends on KEXEC_SIG depends on SIGNED_PE_FILE_VERIFICATION select SYSTEM_TRUSTED_KEYRING ---help--- diff --git a/crypto/asymmetric_keys/verify_pefile.c b/crypto/asymmetric_keys/verify_pefile.c index d178650fd524..4473cea1e877 100644 --- a/crypto/asymmetric_keys/verify_pefile.c +++ b/crypto/asymmetric_keys/verify_pefile.c @@ -100,7 +100,7 @@ static int pefile_parse_binary(const void *pebuf, unsigned int pelen, if (!ddir->certs.virtual_address || !ddir->certs.size) { pr_debug("Unsigned PE binary\n"); - return -EKEYREJECTED; + return -ENODATA; } chkaddr(ctx->header_size, ddir->certs.virtual_address, @@ -408,6 +408,8 @@ static int pefile_digest_pe(const void *pebuf, unsigned int pelen, * (*) 0 if at least one signature chain intersects with the keys in the trust * keyring, or: * + * (*) -ENODATA if there is no signature present. + * * (*) -ENOPKG if a suitable crypto module couldn't be found for a check on a * chain. * diff --git a/include/linux/kexec.h b/include/linux/kexec.h index b9b1bc5f9669..58b27c7bdc2b 100644 --- a/include/linux/kexec.h +++ b/include/linux/kexec.h @@ -125,7 +125,7 @@ typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf, unsigned long cmdline_len); typedef int (kexec_cleanup_t)(void *loader_data); -#ifdef CONFIG_KEXEC_VERIFY_SIG +#ifdef CONFIG_KEXEC_SIG typedef int (kexec_verify_sig_t)(const char *kernel_buf, unsigned long kernel_len); #endif @@ -134,7 +134,7 @@ struct kexec_file_ops { kexec_probe_t *probe; kexec_load_t *load; kexec_cleanup_t *cleanup; -#ifdef CONFIG_KEXEC_VERIFY_SIG +#ifdef CONFIG_KEXEC_SIG kexec_verify_sig_t *verify_sig; #endif }; diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c index f1d0e00a3971..eec7e5bb2a08 100644 --- a/kernel/kexec_file.c +++ b/kernel/kexec_file.c @@ -90,7 +90,7 @@ int __weak arch_kimage_file_post_load_cleanup(struct kimage *image) return kexec_image_post_load_cleanup_default(image); } -#ifdef CONFIG_KEXEC_VERIFY_SIG +#ifdef CONFIG_KEXEC_SIG static int kexec_image_verify_sig_default(struct kimage *image, void *buf, unsigned long buf_len) { @@ -188,7 +188,8 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, const char __user *cmdline_ptr, unsigned long cmdline_len, unsigned flags) { - int ret = 0; + const char *reason; + int ret; void *ldata; loff_t size; @@ -207,15 +208,47 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, if (ret) goto out; -#ifdef CONFIG_KEXEC_VERIFY_SIG +#ifdef CONFIG_KEXEC_SIG ret = arch_kexec_kernel_verify_sig(image, image->kernel_buf, image->kernel_buf_len); - if (ret) { - pr_debug("kernel signature verification failed.\n"); +#else + ret = -ENODATA; +#endif + + switch (ret) { + case 0: + break; + + /* Certain verification errors are non-fatal if we're not + * checking errors, provided we aren't mandating that there + * must be a valid signature. + */ + case -ENODATA: + reason = "kexec of unsigned image"; + goto decide; + case -ENOPKG: + reason = "kexec of image with unsupported crypto"; + goto decide; + case -ENOKEY: + reason = "kexec of image with unavailable key"; + decide: + if (IS_ENABLED(CONFIG_KEXEC_SIG_FORCE)) { + pr_notice("%s rejected\n", reason); + goto out; + } + + ret = 0; + break; + + /* All other errors are fatal, including nomem, unparseable + * signatures and signature check failures - even if signatures + * aren't required. + */ + default: + pr_notice("kernel signature verification failed (%d).\n", ret); goto out; } - pr_debug("kernel signature verification successful.\n"); -#endif + /* It is possible that there no initramfs is being loaded */ if (!(flags & KEXEC_FILE_NO_INITRAMFS)) { ret = kernel_read_file_from_fd(initrd_fd, &image->initrd_buf, -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH V34 08/29] kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE 2019-06-22 0:03 ` [PATCH V34 08/29] kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE Matthew Garrett @ 2019-06-24 2:01 ` Dave Young 2019-06-25 2:35 ` Dave Young 0 siblings, 1 reply; 13+ messages in thread From: Dave Young @ 2019-06-24 2:01 UTC (permalink / raw) To: Matthew Garrett Cc: Jiri Bohac, linux-api, kexec, jmorris, Matthew Garrett, linux-kernel, David Howells, linux-security-module On 06/21/19 at 05:03pm, Matthew Garrett wrote: > From: Jiri Bohac <jbohac@suse.cz> > > This is a preparatory patch for kexec_file_load() lockdown. A locked down > kernel needs to prevent unsigned kernel images from being loaded with > kexec_file_load(). Currently, the only way to force the signature > verification is compiling with KEXEC_VERIFY_SIG. This prevents loading > usigned images even when the kernel is not locked down at runtime. > > This patch splits KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE. > Analogous to the MODULE_SIG and MODULE_SIG_FORCE for modules, KEXEC_SIG > turns on the signature verification but allows unsigned images to be > loaded. KEXEC_SIG_FORCE disallows images without a valid signature. > > [Modified by David Howells such that: > > (1) verify_pefile_signature() differentiates between no-signature and > sig-didn't-match in its returned errors. > > (2) kexec fails with EKEYREJECTED if there is a signature for which we > have a key, but signature doesn't match - even if in non-forcing mode. > > (3) kexec fails with EBADMSG or some other error if there is a signature > which cannot be parsed - even if in non-forcing mode. > > (4) kexec fails with ELIBBAD if the PE file cannot be parsed to extract > the signature - even if in non-forcing mode. > > ] Seems I do not see EBADMSG and ELIBBAD in this patch, also kexec fails with proper errno instead of EKEYREJECTED only. I may missed something? Other than the patch log issue: Reviewed-by: Dave Young <dyoung@redhat.com> > > Signed-off-by: Jiri Bohac <jbohac@suse.cz> > Signed-off-by: David Howells <dhowells@redhat.com> > Signed-off-by: Matthew Garrett <mjg59@google.com> > Reviewed-by: Jiri Bohac <jbohac@suse.cz> > cc: kexec@lists.infradead.org > --- > arch/x86/Kconfig | 20 ++++++++--- > crypto/asymmetric_keys/verify_pefile.c | 4 ++- > include/linux/kexec.h | 4 +-- > kernel/kexec_file.c | 47 ++++++++++++++++++++++---- > 4 files changed, 60 insertions(+), 15 deletions(-) > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > index c1f9b3cf437c..84381dd60760 100644 > --- a/arch/x86/Kconfig > +++ b/arch/x86/Kconfig > @@ -2012,20 +2012,30 @@ config KEXEC_FILE > config ARCH_HAS_KEXEC_PURGATORY > def_bool KEXEC_FILE > > -config KEXEC_VERIFY_SIG > +config KEXEC_SIG > bool "Verify kernel signature during kexec_file_load() syscall" > depends on KEXEC_FILE > ---help--- > - This option makes kernel signature verification mandatory for > - the kexec_file_load() syscall. > > - In addition to that option, you need to enable signature > + This option makes the kexec_file_load() syscall check for a valid > + signature of the kernel image. The image can still be loaded without > + a valid signature unless you also enable KEXEC_SIG_FORCE, though if > + there's a signature that we can check, then it must be valid. > + > + In addition to this option, you need to enable signature > verification for the corresponding kernel image type being > loaded in order for this to work. > > +config KEXEC_SIG_FORCE > + bool "Require a valid signature in kexec_file_load() syscall" > + depends on KEXEC_SIG > + ---help--- > + This option makes kernel signature verification mandatory for > + the kexec_file_load() syscall. > + > config KEXEC_BZIMAGE_VERIFY_SIG > bool "Enable bzImage signature verification support" > - depends on KEXEC_VERIFY_SIG > + depends on KEXEC_SIG > depends on SIGNED_PE_FILE_VERIFICATION > select SYSTEM_TRUSTED_KEYRING > ---help--- > diff --git a/crypto/asymmetric_keys/verify_pefile.c b/crypto/asymmetric_keys/verify_pefile.c > index d178650fd524..4473cea1e877 100644 > --- a/crypto/asymmetric_keys/verify_pefile.c > +++ b/crypto/asymmetric_keys/verify_pefile.c > @@ -100,7 +100,7 @@ static int pefile_parse_binary(const void *pebuf, unsigned int pelen, > > if (!ddir->certs.virtual_address || !ddir->certs.size) { > pr_debug("Unsigned PE binary\n"); > - return -EKEYREJECTED; > + return -ENODATA; > } > > chkaddr(ctx->header_size, ddir->certs.virtual_address, > @@ -408,6 +408,8 @@ static int pefile_digest_pe(const void *pebuf, unsigned int pelen, > * (*) 0 if at least one signature chain intersects with the keys in the trust > * keyring, or: > * > + * (*) -ENODATA if there is no signature present. > + * > * (*) -ENOPKG if a suitable crypto module couldn't be found for a check on a > * chain. > * > diff --git a/include/linux/kexec.h b/include/linux/kexec.h > index b9b1bc5f9669..58b27c7bdc2b 100644 > --- a/include/linux/kexec.h > +++ b/include/linux/kexec.h > @@ -125,7 +125,7 @@ typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf, > unsigned long cmdline_len); > typedef int (kexec_cleanup_t)(void *loader_data); > > -#ifdef CONFIG_KEXEC_VERIFY_SIG > +#ifdef CONFIG_KEXEC_SIG > typedef int (kexec_verify_sig_t)(const char *kernel_buf, > unsigned long kernel_len); > #endif > @@ -134,7 +134,7 @@ struct kexec_file_ops { > kexec_probe_t *probe; > kexec_load_t *load; > kexec_cleanup_t *cleanup; > -#ifdef CONFIG_KEXEC_VERIFY_SIG > +#ifdef CONFIG_KEXEC_SIG > kexec_verify_sig_t *verify_sig; > #endif > }; > diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c > index f1d0e00a3971..eec7e5bb2a08 100644 > --- a/kernel/kexec_file.c > +++ b/kernel/kexec_file.c > @@ -90,7 +90,7 @@ int __weak arch_kimage_file_post_load_cleanup(struct kimage *image) > return kexec_image_post_load_cleanup_default(image); > } > > -#ifdef CONFIG_KEXEC_VERIFY_SIG > +#ifdef CONFIG_KEXEC_SIG > static int kexec_image_verify_sig_default(struct kimage *image, void *buf, > unsigned long buf_len) > { > @@ -188,7 +188,8 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, > const char __user *cmdline_ptr, > unsigned long cmdline_len, unsigned flags) > { > - int ret = 0; > + const char *reason; > + int ret; > void *ldata; > loff_t size; > > @@ -207,15 +208,47 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, > if (ret) > goto out; > > -#ifdef CONFIG_KEXEC_VERIFY_SIG > +#ifdef CONFIG_KEXEC_SIG > ret = arch_kexec_kernel_verify_sig(image, image->kernel_buf, > image->kernel_buf_len); > - if (ret) { > - pr_debug("kernel signature verification failed.\n"); > +#else > + ret = -ENODATA; > +#endif > + > + switch (ret) { > + case 0: > + break; > + > + /* Certain verification errors are non-fatal if we're not > + * checking errors, provided we aren't mandating that there > + * must be a valid signature. > + */ > + case -ENODATA: > + reason = "kexec of unsigned image"; > + goto decide; > + case -ENOPKG: > + reason = "kexec of image with unsupported crypto"; > + goto decide; > + case -ENOKEY: > + reason = "kexec of image with unavailable key"; > + decide: > + if (IS_ENABLED(CONFIG_KEXEC_SIG_FORCE)) { > + pr_notice("%s rejected\n", reason); > + goto out; > + } > + > + ret = 0; > + break; > + > + /* All other errors are fatal, including nomem, unparseable > + * signatures and signature check failures - even if signatures > + * aren't required. > + */ > + default: > + pr_notice("kernel signature verification failed (%d).\n", ret); > goto out; > } > - pr_debug("kernel signature verification successful.\n"); > -#endif > + > /* It is possible that there no initramfs is being loaded */ > if (!(flags & KEXEC_FILE_NO_INITRAMFS)) { > ret = kernel_read_file_from_fd(initrd_fd, &image->initrd_buf, > -- > 2.22.0.410.gd8fdbe21b5-goog > _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V34 08/29] kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE 2019-06-24 2:01 ` Dave Young @ 2019-06-25 2:35 ` Dave Young 0 siblings, 0 replies; 13+ messages in thread From: Dave Young @ 2019-06-25 2:35 UTC (permalink / raw) To: Matthew Garrett Cc: Jiri Bohac, linux-api, kexec, jmorris, Matthew Garrett, linux-kernel, David Howells, linux-security-module On 06/24/19 at 10:01am, Dave Young wrote: > On 06/21/19 at 05:03pm, Matthew Garrett wrote: > > From: Jiri Bohac <jbohac@suse.cz> > > > > This is a preparatory patch for kexec_file_load() lockdown. A locked down > > kernel needs to prevent unsigned kernel images from being loaded with > > kexec_file_load(). Currently, the only way to force the signature > > verification is compiling with KEXEC_VERIFY_SIG. This prevents loading > > usigned images even when the kernel is not locked down at runtime. > > > > This patch splits KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE. > > Analogous to the MODULE_SIG and MODULE_SIG_FORCE for modules, KEXEC_SIG > > turns on the signature verification but allows unsigned images to be > > loaded. KEXEC_SIG_FORCE disallows images without a valid signature. > > > > [Modified by David Howells such that: > > > > (1) verify_pefile_signature() differentiates between no-signature and > > sig-didn't-match in its returned errors. > > > > (2) kexec fails with EKEYREJECTED if there is a signature for which we > > have a key, but signature doesn't match - even if in non-forcing mode. > > > > (3) kexec fails with EBADMSG or some other error if there is a signature > > which cannot be parsed - even if in non-forcing mode. > > > > (4) kexec fails with ELIBBAD if the PE file cannot be parsed to extract > > the signature - even if in non-forcing mode. > > > > ] > > Seems I do not see EBADMSG and ELIBBAD in this patch, also kexec fails > with proper errno instead of EKEYREJECTED only. > > I may missed something? Other than the patch log issue: > > Reviewed-by: Dave Young <dyoung@redhat.com> Hold on :) Noticed another issue, please see comment inline.. > > > > > Signed-off-by: Jiri Bohac <jbohac@suse.cz> > > Signed-off-by: David Howells <dhowells@redhat.com> > > Signed-off-by: Matthew Garrett <mjg59@google.com> > > Reviewed-by: Jiri Bohac <jbohac@suse.cz> > > cc: kexec@lists.infradead.org > > --- > > arch/x86/Kconfig | 20 ++++++++--- > > crypto/asymmetric_keys/verify_pefile.c | 4 ++- > > include/linux/kexec.h | 4 +-- > > kernel/kexec_file.c | 47 ++++++++++++++++++++++---- > > 4 files changed, 60 insertions(+), 15 deletions(-) > > > > diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig > > index c1f9b3cf437c..84381dd60760 100644 > > --- a/arch/x86/Kconfig > > +++ b/arch/x86/Kconfig > > @@ -2012,20 +2012,30 @@ config KEXEC_FILE > > config ARCH_HAS_KEXEC_PURGATORY > > def_bool KEXEC_FILE > > > > -config KEXEC_VERIFY_SIG > > +config KEXEC_SIG > > bool "Verify kernel signature during kexec_file_load() syscall" > > depends on KEXEC_FILE > > ---help--- > > - This option makes kernel signature verification mandatory for > > - the kexec_file_load() syscall. > > > > - In addition to that option, you need to enable signature > > + This option makes the kexec_file_load() syscall check for a valid > > + signature of the kernel image. The image can still be loaded without > > + a valid signature unless you also enable KEXEC_SIG_FORCE, though if > > + there's a signature that we can check, then it must be valid. > > + > > + In addition to this option, you need to enable signature > > verification for the corresponding kernel image type being > > loaded in order for this to work. > > > > +config KEXEC_SIG_FORCE > > + bool "Require a valid signature in kexec_file_load() syscall" > > + depends on KEXEC_SIG > > + ---help--- > > + This option makes kernel signature verification mandatory for > > + the kexec_file_load() syscall. > > + > > config KEXEC_BZIMAGE_VERIFY_SIG > > bool "Enable bzImage signature verification support" > > - depends on KEXEC_VERIFY_SIG > > + depends on KEXEC_SIG > > depends on SIGNED_PE_FILE_VERIFICATION > > select SYSTEM_TRUSTED_KEYRING > > ---help--- > > diff --git a/crypto/asymmetric_keys/verify_pefile.c b/crypto/asymmetric_keys/verify_pefile.c > > index d178650fd524..4473cea1e877 100644 > > --- a/crypto/asymmetric_keys/verify_pefile.c > > +++ b/crypto/asymmetric_keys/verify_pefile.c > > @@ -100,7 +100,7 @@ static int pefile_parse_binary(const void *pebuf, unsigned int pelen, > > > > if (!ddir->certs.virtual_address || !ddir->certs.size) { > > pr_debug("Unsigned PE binary\n"); > > - return -EKEYREJECTED; > > + return -ENODATA; > > } > > > > chkaddr(ctx->header_size, ddir->certs.virtual_address, > > @@ -408,6 +408,8 @@ static int pefile_digest_pe(const void *pebuf, unsigned int pelen, > > * (*) 0 if at least one signature chain intersects with the keys in the trust > > * keyring, or: > > * > > + * (*) -ENODATA if there is no signature present. > > + * > > * (*) -ENOPKG if a suitable crypto module couldn't be found for a check on a > > * chain. > > * > > diff --git a/include/linux/kexec.h b/include/linux/kexec.h > > index b9b1bc5f9669..58b27c7bdc2b 100644 > > --- a/include/linux/kexec.h > > +++ b/include/linux/kexec.h > > @@ -125,7 +125,7 @@ typedef void *(kexec_load_t)(struct kimage *image, char *kernel_buf, > > unsigned long cmdline_len); > > typedef int (kexec_cleanup_t)(void *loader_data); > > > > -#ifdef CONFIG_KEXEC_VERIFY_SIG > > +#ifdef CONFIG_KEXEC_SIG > > typedef int (kexec_verify_sig_t)(const char *kernel_buf, > > unsigned long kernel_len); > > #endif > > @@ -134,7 +134,7 @@ struct kexec_file_ops { > > kexec_probe_t *probe; > > kexec_load_t *load; > > kexec_cleanup_t *cleanup; > > -#ifdef CONFIG_KEXEC_VERIFY_SIG > > +#ifdef CONFIG_KEXEC_SIG > > kexec_verify_sig_t *verify_sig; > > #endif > > }; > > diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c > > index f1d0e00a3971..eec7e5bb2a08 100644 > > --- a/kernel/kexec_file.c > > +++ b/kernel/kexec_file.c > > @@ -90,7 +90,7 @@ int __weak arch_kimage_file_post_load_cleanup(struct kimage *image) > > return kexec_image_post_load_cleanup_default(image); > > } > > > > -#ifdef CONFIG_KEXEC_VERIFY_SIG > > +#ifdef CONFIG_KEXEC_SIG > > static int kexec_image_verify_sig_default(struct kimage *image, void *buf, > > unsigned long buf_len) > > { > > @@ -188,7 +188,8 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, > > const char __user *cmdline_ptr, > > unsigned long cmdline_len, unsigned flags) > > { > > - int ret = 0; > > + const char *reason; > > + int ret; > > void *ldata; > > loff_t size; > > > > @@ -207,15 +208,47 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, > > if (ret) > > goto out; > > > > -#ifdef CONFIG_KEXEC_VERIFY_SIG > > +#ifdef CONFIG_KEXEC_SIG > > ret = arch_kexec_kernel_verify_sig(image, image->kernel_buf, > > image->kernel_buf_len); > > - if (ret) { > > - pr_debug("kernel signature verification failed.\n"); > > +#else > > + ret = -ENODATA; Use -ENODATA for above case looks not correct, please just remove the #else and move the #endif to the end of the switch chunk. > > +#endif > > + > > + switch (ret) { > > + case 0: > > + break; > > + > > + /* Certain verification errors are non-fatal if we're not > > + * checking errors, provided we aren't mandating that there > > + * must be a valid signature. > > + */ > > + case -ENODATA: > > + reason = "kexec of unsigned image"; > > + goto decide; > > + case -ENOPKG: > > + reason = "kexec of image with unsupported crypto"; > > + goto decide; > > + case -ENOKEY: > > + reason = "kexec of image with unavailable key"; > > + decide: > > + if (IS_ENABLED(CONFIG_KEXEC_SIG_FORCE)) { > > + pr_notice("%s rejected\n", reason); > > + goto out; > > + } > > + > > + ret = 0; > > + break; > > + > > + /* All other errors are fatal, including nomem, unparseable > > + * signatures and signature check failures - even if signatures > > + * aren't required. > > + */ > > + default: > > + pr_notice("kernel signature verification failed (%d).\n", ret); > > goto out; > > } > > - pr_debug("kernel signature verification successful.\n"); > > -#endif > > + > > /* It is possible that there no initramfs is being loaded */ > > if (!(flags & KEXEC_FILE_NO_INITRAMFS)) { > > ret = kernel_read_file_from_fd(initrd_fd, &image->initrd_buf, > > -- > > 2.22.0.410.gd8fdbe21b5-goog > > Thanks Dave _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down [not found] <20190622000358.19895-1-matthewgarrett@google.com> ` (2 preceding siblings ...) 2019-06-22 0:03 ` [PATCH V34 08/29] kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE Matthew Garrett @ 2019-06-22 0:03 ` Matthew Garrett 2019-06-22 23:54 ` Kees Cook 2019-06-27 4:59 ` James Morris 3 siblings, 2 replies; 13+ messages in thread From: Matthew Garrett @ 2019-06-22 0:03 UTC (permalink / raw) To: jmorris Cc: Jiri Bohac, linux-api, kexec, linux-kernel, Matthew Garrett, David Howells, linux-security-module From: Jiri Bohac <jbohac@suse.cz> When KEXEC_SIG is not enabled, kernel should not load images through kexec_file systemcall if the kernel is locked down. [Modified by David Howells to fit with modifications to the previous patch and to return -EPERM if the kernel is locked down for consistency with other lockdowns. Modified by Matthew Garrett to remove the IMA integration, which will be replaced by integrating with the IMA architecture policy patches.] Signed-off-by: Jiri Bohac <jbohac@suse.cz> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Matthew Garrett <mjg59@google.com> Reviewed-by: Jiri Bohac <jbohac@suse.cz> cc: kexec@lists.infradead.org --- kernel/kexec_file.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c index eec7e5bb2a08..27adb4312b03 100644 --- a/kernel/kexec_file.c +++ b/kernel/kexec_file.c @@ -237,7 +237,10 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, goto out; } - ret = 0; + ret = security_locked_down(LOCKDOWN_KEXEC); + if (ret) + goto out; + break; /* All other errors are fatal, including nomem, unparseable -- 2.22.0.410.gd8fdbe21b5-goog _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down 2019-06-22 0:03 ` [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down Matthew Garrett @ 2019-06-22 23:54 ` Kees Cook 2019-06-27 4:59 ` James Morris 1 sibling, 0 replies; 13+ messages in thread From: Kees Cook @ 2019-06-22 23:54 UTC (permalink / raw) To: Matthew Garrett Cc: Jiri Bohac, linux-api, kexec, jmorris, Matthew Garrett, linux-kernel, David Howells, linux-security-module On Fri, Jun 21, 2019 at 05:03:38PM -0700, Matthew Garrett wrote: > From: Jiri Bohac <jbohac@suse.cz> > > When KEXEC_SIG is not enabled, kernel should not load images through > kexec_file systemcall if the kernel is locked down. > > [Modified by David Howells to fit with modifications to the previous patch > and to return -EPERM if the kernel is locked down for consistency with > other lockdowns. Modified by Matthew Garrett to remove the IMA > integration, which will be replaced by integrating with the IMA > architecture policy patches.] > > Signed-off-by: Jiri Bohac <jbohac@suse.cz> Reviewed-by: Kees Cook <keescook@chromium.org> -Kees > Signed-off-by: David Howells <dhowells@redhat.com> > Signed-off-by: Matthew Garrett <mjg59@google.com> > Reviewed-by: Jiri Bohac <jbohac@suse.cz> > cc: kexec@lists.infradead.org > --- > kernel/kexec_file.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/kernel/kexec_file.c b/kernel/kexec_file.c > index eec7e5bb2a08..27adb4312b03 100644 > --- a/kernel/kexec_file.c > +++ b/kernel/kexec_file.c > @@ -237,7 +237,10 @@ kimage_file_prepare_segments(struct kimage *image, int kernel_fd, int initrd_fd, > goto out; > } > > - ret = 0; > + ret = security_locked_down(LOCKDOWN_KEXEC); > + if (ret) > + goto out; > + > break; > > /* All other errors are fatal, including nomem, unparseable > -- > 2.22.0.410.gd8fdbe21b5-goog > -- Kees Cook _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down 2019-06-22 0:03 ` [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down Matthew Garrett 2019-06-22 23:54 ` Kees Cook @ 2019-06-27 4:59 ` James Morris 2019-06-27 15:28 ` Matthew Garrett 1 sibling, 1 reply; 13+ messages in thread From: James Morris @ 2019-06-27 4:59 UTC (permalink / raw) To: Matthew Garrett Cc: Jiri Bohac, linux-api, kexec, linux-kernel, Matthew Garrett, David Howells, linux-security-module On Fri, 21 Jun 2019, Matthew Garrett wrote: > From: Jiri Bohac <jbohac@suse.cz> > > When KEXEC_SIG is not enabled, kernel should not load images through > kexec_file systemcall if the kernel is locked down. This is not a criticism of the patch but a related issue which I haven't seen discussed (apologies if it has). If signed code is loaded into ring 0, verified by the kernel, then executed, you still lose your secure/trusted/verified boot state. If the currently running kernel has been runtime-compromised, any signature verification performed by the kernel cannot be trusted. This problem is out of scope for the lockdown threat model (which naturally cannot include a compromised kernel), but folk should be aware that signature-verified kexec does not provide equivalent assurance to a full reboot on a secure-boot system. Potential mitigations here include runtime integrity verification of the kernel via a separate security monitor (hypervisor, SMM, TEE etc.) or some kind of platform support for kexec verification. -- James Morris <jmorris@namei.org> _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down 2019-06-27 4:59 ` James Morris @ 2019-06-27 15:28 ` Matthew Garrett 2019-06-27 18:14 ` James Morris 0 siblings, 1 reply; 13+ messages in thread From: Matthew Garrett @ 2019-06-27 15:28 UTC (permalink / raw) To: James Morris Cc: Jiri Bohac, Linux API, kexec, Linux Kernel Mailing List, David Howells, LSM List On Wed, Jun 26, 2019 at 9:59 PM James Morris <jmorris@namei.org> wrote: > This is not a criticism of the patch but a related issue which I haven't > seen discussed (apologies if it has). > > If signed code is loaded into ring 0, verified by the kernel, then > executed, you still lose your secure/trusted/verified boot state. If the > currently running kernel has been runtime-compromised, any signature > verification performed by the kernel cannot be trusted. > > This problem is out of scope for the lockdown threat model (which > naturally cannot include a compromised kernel), but folk should be aware > that signature-verified kexec does not provide equivalent assurance to a > full reboot on a secure-boot system. By that metric, on a secure boot system how do we determine that code running in the firmware environment wasn't compromised before it launched the initial signed kernel? _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down 2019-06-27 15:28 ` Matthew Garrett @ 2019-06-27 18:14 ` James Morris 2019-06-27 23:17 ` Matthew Garrett 0 siblings, 1 reply; 13+ messages in thread From: James Morris @ 2019-06-27 18:14 UTC (permalink / raw) To: Matthew Garrett Cc: Jiri Bohac, Linux API, kexec, Linux Kernel Mailing List, David Howells, LSM List On Thu, 27 Jun 2019, Matthew Garrett wrote: > By that metric, on a secure boot system how do we determine that code > running in the firmware environment wasn't compromised before it > launched the initial signed kernel? Remote attestation tied to a hardware root of trust, before allowing access to any further resources. -- James Morris <jmorris@namei.org> _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down 2019-06-27 18:14 ` James Morris @ 2019-06-27 23:17 ` Matthew Garrett 0 siblings, 0 replies; 13+ messages in thread From: Matthew Garrett @ 2019-06-27 23:17 UTC (permalink / raw) To: James Morris Cc: Jiri Bohac, Linux API, kexec, Linux Kernel Mailing List, David Howells, LSM List On Thu, Jun 27, 2019 at 11:14 AM James Morris <jmorris@namei.org> wrote: > > On Thu, 27 Jun 2019, Matthew Garrett wrote: > > > By that metric, on a secure boot system how do we determine that code > > running in the firmware environment wasn't compromised before it > > launched the initial signed kernel? > > Remote attestation tied to a hardware root of trust, before allowing > access to any further resources. If you use IMA you can get the same guarantees over kexec. _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2019-06-27 23:18 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20190622000358.19895-1-matthewgarrett@google.com>
2019-06-22 0:03 ` [PATCH V34 06/29] kexec_load: Disable at runtime if the kernel is locked down Matthew Garrett
2019-06-22 23:52 ` Kees Cook
2019-06-22 0:03 ` [PATCH V34 07/29] Copy secure_boot flag in boot params across kexec reboot Matthew Garrett
2019-06-22 23:53 ` Kees Cook
2019-06-22 0:03 ` [PATCH V34 08/29] kexec_file: split KEXEC_VERIFY_SIG into KEXEC_SIG and KEXEC_SIG_FORCE Matthew Garrett
2019-06-24 2:01 ` Dave Young
2019-06-25 2:35 ` Dave Young
2019-06-22 0:03 ` [PATCH V34 09/29] kexec_file: Restrict at runtime if the kernel is locked down Matthew Garrett
2019-06-22 23:54 ` Kees Cook
2019-06-27 4:59 ` James Morris
2019-06-27 15:28 ` Matthew Garrett
2019-06-27 18:14 ` James Morris
2019-06-27 23:17 ` Matthew Garrett
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox