From: David Howells <dhowells@redhat.com> To: linux-security-module@vger.kernel.org Cc: gnomes@lxorguk.ukuu.org.uk, linux-efi@vger.kernel.org, matthew.garrett@nebula.com, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, dhowells@redhat.com, jforbes@redhat.com Subject: [PATCH 26/27] efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode Date: Thu, 19 Oct 2017 15:53:51 +0100 Message-ID: <150842483172.7923.2791223614506312745.stgit@warthog.procyon.org.uk> (raw) In-Reply-To: <150842463163.7923.11081723749106843698.stgit@warthog.procyon.org.uk> UEFI machines can be booted in Secure Boot mode. Add an EFI_SECURE_BOOT flag that can be passed to efi_enabled() to find out whether secure boot is enabled. Move the switch-statement in x86's setup_arch() that inteprets the secure_boot boot parameter to generic code and set the bit there. Suggested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: David Howells <dhowells@redhat.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> cc: linux-efi@vger.kernel.org --- arch/x86/kernel/setup.c | 14 +------------- drivers/firmware/efi/Makefile | 1 + drivers/firmware/efi/secureboot.c | 37 +++++++++++++++++++++++++++++++++++++ include/linux/efi.h | 16 ++++++++++------ 4 files changed, 49 insertions(+), 19 deletions(-) create mode 100644 drivers/firmware/efi/secureboot.c diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c index 0957dd73d127..7c2162f9e769 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -1197,19 +1197,7 @@ void __init setup_arch(char **cmdline_p) /* Allocate bigger log buffer */ setup_log_buf(1); - if (efi_enabled(EFI_BOOT)) { - switch (boot_params.secure_boot) { - case efi_secureboot_mode_disabled: - pr_info("Secure boot disabled\n"); - break; - case efi_secureboot_mode_enabled: - pr_info("Secure boot enabled\n"); - break; - default: - pr_info("Secure boot could not be determined\n"); - break; - } - } + efi_set_secure_boot(boot_params.secure_boot); reserve_initrd(); diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile index 0329d319d89a..883f9f7eefc6 100644 --- a/drivers/firmware/efi/Makefile +++ b/drivers/firmware/efi/Makefile @@ -23,6 +23,7 @@ obj-$(CONFIG_EFI_FAKE_MEMMAP) += fake_mem.o obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o obj-$(CONFIG_EFI_TEST) += test/ obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o +obj-$(CONFIG_EFI) += secureboot.o obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o arm-obj-$(CONFIG_EFI) := arm-init.o arm-runtime.o diff --git a/drivers/firmware/efi/secureboot.c b/drivers/firmware/efi/secureboot.c new file mode 100644 index 000000000000..674dcc01bb0b --- /dev/null +++ b/drivers/firmware/efi/secureboot.c @@ -0,0 +1,37 @@ +/* Core kernel secure boot support. + * + * Copyright (C) 2017 Red Hat, Inc. All Rights Reserved. + * Written by David Howells (dhowells@redhat.com) + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public Licence + * as published by the Free Software Foundation; either version + * 2 of the Licence, or (at your option) any later version. + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include <linux/efi.h> +#include <linux/kernel.h> +#include <linux/printk.h> + +/* + * Decide what to do when UEFI secure boot mode is enabled. + */ +void __init efi_set_secure_boot(enum efi_secureboot_mode mode) +{ + if (efi_enabled(EFI_BOOT)) { + switch (mode) { + case efi_secureboot_mode_disabled: + pr_info("Secure boot disabled\n"); + break; + case efi_secureboot_mode_enabled: + set_bit(EFI_SECURE_BOOT, &efi.flags); + pr_info("Secure boot enabled\n"); + break; + default: + pr_info("Secure boot could not be determined\n"); + break; + } + } +} diff --git a/include/linux/efi.h b/include/linux/efi.h index 66f4a4e79f4b..7c7a7e33e4d1 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1103,6 +1103,14 @@ extern int __init efi_setup_pcdp_console(char *); #define EFI_DBG 8 /* Print additional debug info at runtime */ #define EFI_NX_PE_DATA 9 /* Can runtime data regions be mapped non-executable? */ #define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */ +#define EFI_SECURE_BOOT 11 /* Are we in Secure Boot mode? */ + +enum efi_secureboot_mode { + efi_secureboot_mode_unset, + efi_secureboot_mode_unknown, + efi_secureboot_mode_disabled, + efi_secureboot_mode_enabled, +}; #ifdef CONFIG_EFI /* @@ -1115,6 +1123,7 @@ static inline bool efi_enabled(int feature) extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); extern bool efi_is_table_address(unsigned long phys_addr); +extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode); #else static inline bool efi_enabled(int feature) { @@ -1133,6 +1142,7 @@ static inline bool efi_is_table_address(unsigned long phys_addr) { return false; } +static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {} #endif extern int efi_status_to_err(efi_status_t status); @@ -1518,12 +1528,6 @@ efi_status_t efi_setup_gop(efi_system_table_t *sys_table_arg, bool efi_runtime_disabled(void); extern void efi_call_virt_check_flags(unsigned long flags, const char *call); -enum efi_secureboot_mode { - efi_secureboot_mode_unset, - efi_secureboot_mode_unknown, - efi_secureboot_mode_disabled, - efi_secureboot_mode_enabled, -}; enum efi_secureboot_mode efi_get_secureboot(efi_system_table_t *sys_table); #ifdef CONFIG_RESET_ATTACK_MITIGATION
next prev parent reply index Thread overview: 151+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-10-19 14:50 [PATCH 00/27] security, efi: Add kernel lockdown David Howells 2017-10-19 14:50 ` [PATCH 01/27] Add the ability to lock down access to the running kernel image David Howells 2017-10-20 23:19 ` James Morris 2017-10-19 14:50 ` [PATCH 02/27] Add a SysRq option to lift kernel lockdown David Howells 2017-10-19 17:20 ` Randy Dunlap 2017-10-19 22:12 ` David Howells 2017-11-07 17:39 ` Thiago Jung Bauermann 2017-11-07 22:56 ` David Howells 2017-10-19 14:50 ` [PATCH 03/27] Enforce module signatures if the kernel is locked down David Howells 2017-10-20 6:33 ` joeyli 2017-10-20 23:21 ` James Morris 2017-10-27 18:48 ` Mimi Zohar 2017-10-30 17:00 ` David Howells 2017-10-30 17:52 ` Mimi Zohar 2017-11-02 17:22 ` David Howells 2017-11-02 19:13 ` Mimi Zohar 2017-11-02 21:30 ` David Howells 2017-11-02 21:41 ` Mimi Zohar 2017-11-02 22:01 ` David Howells 2017-11-02 22:18 ` Mimi Zohar 2017-10-19 14:51 ` [PATCH 04/27] Restrict /dev/mem and /dev/kmem when " David Howells 2017-10-20 6:37 ` joeyli 2017-10-20 23:21 ` James Morris 2017-10-19 14:51 ` [PATCH 05/27] kexec: Disable at runtime if " David Howells 2017-10-20 6:38 ` joeyli 2017-10-20 23:22 ` James Morris 2017-10-19 14:51 ` [PATCH 06/27] Copy secure_boot flag in boot params across kexec reboot David Howells 2017-10-20 6:40 ` joeyli 2017-10-19 14:51 ` [PATCH 07/27] kexec_file: Disable at runtime if securelevel has been set David Howells 2017-10-20 23:26 ` James Morris 2017-10-23 15:54 ` Mimi Zohar 2017-10-26 7:42 ` joeyli 2017-10-26 14:17 ` Mimi Zohar 2017-10-27 19:30 ` Mimi Zohar 2017-10-27 19:32 ` Mimi Zohar 2017-10-28 8:34 ` joeyli 2017-10-29 22:26 ` Mimi Zohar 2017-10-30 9:00 ` David Howells 2017-10-30 12:01 ` Mimi Zohar 2017-10-26 15:02 ` David Howells 2017-10-26 15:46 ` Mimi Zohar 2017-10-30 15:49 ` David Howells 2017-10-30 16:43 ` Mimi Zohar 2017-11-02 17:00 ` David Howells 2017-10-26 14:51 ` David Howells 2017-11-02 17:29 ` David Howells 2017-10-19 14:51 ` [PATCH 08/27] hibernate: Disable when the kernel is locked down David Howells 2017-10-20 6:40 ` joeyli 2017-10-19 14:51 ` [PATCH 09/27] uswsusp: " David Howells 2017-10-20 6:41 ` joeyli 2017-10-20 23:29 ` James Morris 2017-10-19 14:51 ` [PATCH 10/27] PCI: Lock down BAR access " David Howells 2017-10-20 6:42 ` joeyli 2017-10-19 14:51 ` [PATCH 11/27] x86: Lock down IO port " David Howells 2017-10-20 6:43 ` joeyli 2017-10-19 14:52 ` [PATCH 12/27] x86/msr: Restrict MSR " David Howells 2017-10-20 6:43 ` joeyli 2017-10-20 18:09 ` Alan Cox 2017-10-20 20:48 ` David Howells 2017-10-21 4:39 ` joeyli 2017-10-23 14:49 ` David Howells 2017-10-25 14:03 ` joeyli 2017-10-19 14:52 ` [PATCH 13/27] asus-wmi: Restrict debugfs interface " David Howells 2017-10-20 6:44 ` joeyli 2017-10-19 14:52 ` [PATCH 14/27] ACPI: Limit access to custom_method " David Howells 2017-10-20 6:45 ` joeyli 2017-10-19 14:52 ` [PATCH 15/27] acpi: Ignore acpi_rsdp kernel param when the kernel has been " David Howells 2017-10-20 6:45 ` joeyli 2017-10-19 14:52 ` [PATCH 16/27] acpi: Disable ACPI table override if the kernel is " David Howells 2017-10-20 6:46 ` joeyli 2017-10-19 14:52 ` [PATCH 17/27] acpi: Disable APEI error injection " David Howells 2017-10-20 6:47 ` joeyli 2017-10-19 14:52 ` [PATCH 18/27] bpf: Restrict kernel image access functions when " David Howells 2017-10-19 22:18 ` Alexei Starovoitov 2017-10-20 2:47 ` joeyli 2017-10-20 8:08 ` David Howells 2017-10-20 15:57 ` jlee 2017-10-20 23:00 ` Alexei Starovoitov 2017-10-23 14:51 ` David Howells 2017-10-20 16:03 ` David Howells 2017-10-20 16:43 ` jlee 2017-10-23 14:53 ` David Howells 2017-10-25 7:07 ` joeyli 2017-10-19 22:48 ` David Howells 2017-10-19 23:31 ` Alexei Starovoitov 2017-11-09 17:15 ` David Howells 2017-10-19 14:52 ` [PATCH 19/27] scsi: Lock down the eata driver David Howells 2017-10-19 14:53 ` [PATCH 20/27] Prohibit PCMCIA CIS storage when the kernel is locked down David Howells 2017-10-19 14:53 ` [PATCH 21/27] Lock down TIOCSSERIAL David Howells 2017-10-19 14:53 ` [PATCH 22/27] Lock down module params that specify hardware parameters (eg. ioport) David Howells 2017-10-19 14:53 ` [PATCH 23/27] x86/mmiotrace: Lock down the testmmiotrace module David Howells 2017-10-19 14:53 ` [PATCH 24/27] debugfs: Disallow use of debugfs files when the kernel is locked down David Howells 2017-10-19 14:53 ` [PATCH 25/27] Lock down /proc/kcore David Howells 2017-10-21 2:11 ` James Morris 2017-10-23 14:56 ` David Howells 2017-10-19 14:53 ` David Howells [this message] 2017-10-21 2:19 ` [PATCH 26/27] efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode James Morris 2017-10-23 14:58 ` David Howells 2017-10-19 14:53 ` [PATCH 27/27] efi: Lock down the kernel if booted in " David Howells 2017-10-19 22:39 ` [PATCH 00/27] security, efi: Add kernel lockdown David Howells 2017-10-23 14:34 ` [PATCH 04/27] Restrict /dev/mem and /dev/kmem when the kernel is locked down David Howells 2017-10-24 10:48 ` Ethan Zhao 2017-10-24 14:56 ` David Howells 2017-11-02 22:01 ` [PATCH 00/27] security, efi: Add kernel lockdown Mimi Zohar 2017-11-02 22:04 ` Firmware signing -- " David Howells 2017-11-02 22:10 ` Mimi Zohar 2017-11-07 23:07 ` Luis R. Rodriguez 2017-11-08 6:15 ` AKASHI, Takahiro 2017-11-08 19:46 ` Luis R. Rodriguez 2017-11-09 1:48 ` AKASHI, Takahiro 2017-11-09 2:17 ` Mimi Zohar 2017-11-09 4:46 ` AKASHI, Takahiro 2017-11-10 13:37 ` Mimi Zohar 2017-11-11 2:32 ` Alan Cox 2017-11-13 11:49 ` Mimi Zohar 2017-11-13 17:42 ` Luis R. Rodriguez 2017-11-13 21:08 ` Alan Cox 2017-12-04 19:51 ` Luis R. Rodriguez 2017-12-07 15:32 ` Alan Cox 2017-11-13 21:44 ` David Howells 2017-11-13 22:09 ` Linus Torvalds 2017-11-14 0:20 ` Alan Cox 2017-11-14 12:21 ` Mimi Zohar 2017-11-14 12:38 ` Greg Kroah-Hartman 2017-11-14 13:17 ` Mimi Zohar 2017-11-14 17:34 ` Linus Torvalds 2017-11-14 19:58 ` Matthew Garrett 2017-11-14 20:18 ` Linus Torvalds 2017-11-14 20:31 ` Matthew Garrett 2017-11-14 20:35 ` Linus Torvalds 2017-11-14 20:37 ` Matthew Garrett 2017-11-14 20:50 ` Luis R. Rodriguez 2017-11-14 20:55 ` Matthew Garrett 2017-11-14 22:14 ` James Bottomley 2017-11-14 22:17 ` Matthew Garrett 2017-11-14 22:31 ` James Bottomley 2017-11-14 22:34 ` Matthew Garrett 2017-11-15 11:49 ` Mimi Zohar 2017-11-15 17:52 ` Luis R. Rodriguez 2017-11-15 19:56 ` Mimi Zohar 2017-11-15 20:46 ` Luis R. Rodriguez 2017-11-16 0:05 ` Mimi Zohar 2017-12-05 10:27 ` Pavel Machek 2017-12-07 23:02 ` Luis R. Rodriguez 2017-12-08 17:11 ` Alan Cox 2017-11-10 1:46 ` Luis R. Rodriguez 2017-11-10 13:45 ` Mimi Zohar 2017-11-13 18:50 ` Luis R. Rodriguez 2017-11-13 19:08 ` Luis R. Rodriguez 2017-11-08 20:01 ` Mimi Zohar 2017-11-08 20:09 ` Luis R. Rodriguez
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=150842483172.7923.2791223614506312745.stgit@warthog.procyon.org.uk \ --to=dhowells@redhat.com \ --cc=gnomes@lxorguk.ukuu.org.uk \ --cc=gregkh@linuxfoundation.org \ --cc=jforbes@redhat.com \ --cc=linux-efi@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-security-module@vger.kernel.org \ --cc=matthew.garrett@nebula.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
LKML Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git git clone --mirror https://lore.kernel.org/lkml/8 lkml/git/8.git git clone --mirror https://lore.kernel.org/lkml/9 lkml/git/9.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \ linux-kernel@vger.kernel.org public-inbox-index lkml Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git