efi: Lock down the kernel if booted in secure boot mode
authorDavid Howells <dhowells@redhat.com>
Wed, 8 Nov 2017 15:11:37 +0000 (15:11 +0000)
committerSalvatore Bonaccorso <carnil@debian.org>
Tue, 20 Mar 2018 08:31:07 +0000 (08:31 +0000)
UEFI Secure Boot provides a mechanism for ensuring that the firmware will
only load signed bootloaders and kernels.  Certain use cases may also
require that all kernel modules also be signed.  Add a configuration option
that to lock down the kernel - which includes requiring validly signed
modules - if the kernel is secure-booted.

Signed-off-by: David Howells <dhowells@redhat.com>
Acked-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
cc: linux-efi@vger.kernel.org

Gbp-Pq: Topic features/all/lockdown
Gbp-Pq: Name 0029-efi-Lock-down-the-kernel-if-booted-in-secure-boot-mo.patch

arch/x86/kernel/setup.c
security/Kconfig
security/lock_down.c

index d8ce66035a78289e8ddda0e14cefba294c45e2ca..02a9c0d22241530d60e5e138d4d7005f6dcd1cc5 100644 (file)
@@ -64,6 +64,7 @@
 #include <linux/dma-mapping.h>
 #include <linux/ctype.h>
 #include <linux/uaccess.h>
+#include <linux/security.h>
 
 #include <linux/percpu.h>
 #include <linux/crash_dump.h>
@@ -998,6 +999,9 @@ void __init setup_arch(char **cmdline_p)
        if (efi_enabled(EFI_BOOT))
                efi_init();
 
+       efi_set_secure_boot(boot_params.secure_boot);
+       init_lockdown();
+
        dmi_scan_machine();
        dmi_memdev_walk();
        dmi_set_dump_stack_arch_desc();
@@ -1151,8 +1155,6 @@ void __init setup_arch(char **cmdline_p)
        /* Allocate bigger log buffer */
        setup_log_buf(1);
 
-       efi_set_secure_boot(boot_params.secure_boot);
-
        reserve_initrd();
 
        acpi_table_upgrade();
index 4da599f3c6f73218193593b8d5ab788b817c1486..ba421881a060ad88c1c9a37cf471b89c3cff24d9 100644 (file)
@@ -242,6 +242,20 @@ config ALLOW_LOCKDOWN_LIFT_BY_SYSRQ
          Allow the lockdown on a kernel to be lifted, by pressing a SysRq key
          combination on a wired keyboard.
 
+config LOCK_DOWN_IN_EFI_SECURE_BOOT
+       bool "Lock down the kernel in EFI Secure Boot mode"
+       default n
+       select LOCK_DOWN_KERNEL
+       depends on EFI
+       help
+         UEFI Secure Boot provides a mechanism for ensuring that the firmware
+         will only load signed bootloaders and kernels.  Secure boot mode may
+         be determined from EFI variables provided by the system firmware if
+         not indicated by the boot parameters.
+
+         Enabling this option turns on results in kernel lockdown being
+         triggered if EFI Secure Boot is set.
+
 
 source security/selinux/Kconfig
 source security/smack/Kconfig
index 2c6b00f0c229e411e093f93dad7b98a1331ef398..527f7e51dc8de092d33be4085cbfbc6193129a29 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/security.h>
 #include <linux/export.h>
 #include <linux/sysrq.h>
+#include <linux/efi.h>
 #include <asm/setup.h>
 
 #ifdef CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ