mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
eeff7d634f
The EFI stub currently prints a number of diagnostic messages that do not carry a lot of information. Since these prints are not controlled by 'loglevel' or other command line parameters, and since they appear on the EFI framebuffer as well (if enabled), it would be nice if we could turn them off. So let's add support for the 'quiet' command line parameter in the stub, and disable the non-error prints if it is passed. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Acked-by: Mark Rutland <mark.rutland@arm.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Matt Fleming <matt@codeblueprint.co.uk> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: bhe@redhat.com Cc: bhsharma@redhat.com Cc: bp@alien8.de Cc: eugene@hp.com Cc: evgeny.kalugin@intel.com Cc: jhugo@codeaurora.org Cc: leif.lindholm@linaro.org Cc: linux-efi@vger.kernel.org Cc: roy.franz@cavium.com Cc: rruigrok@codeaurora.org Link: http://lkml.kernel.org/r/20170404160910.28115-2-ard.biesheuvel@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
87 lines
2.4 KiB
C
87 lines
2.4 KiB
C
/*
|
|
* Secure boot handling.
|
|
*
|
|
* Copyright (C) 2013,2014 Linaro Limited
|
|
* Roy Franz <roy.franz@linaro.org
|
|
* Copyright (C) 2013 Red Hat, Inc.
|
|
* Mark Salter <msalter@redhat.com>
|
|
*
|
|
* This file is part of the Linux kernel, and is made available under the
|
|
* terms of the GNU General Public License version 2.
|
|
*/
|
|
#include <linux/efi.h>
|
|
#include <asm/efi.h>
|
|
|
|
#include "efistub.h"
|
|
|
|
/* BIOS variables */
|
|
static const efi_guid_t efi_variable_guid = EFI_GLOBAL_VARIABLE_GUID;
|
|
static const efi_char16_t const efi_SecureBoot_name[] = {
|
|
'S', 'e', 'c', 'u', 'r', 'e', 'B', 'o', 'o', 't', 0
|
|
};
|
|
static const efi_char16_t const efi_SetupMode_name[] = {
|
|
'S', 'e', 't', 'u', 'p', 'M', 'o', 'd', 'e', 0
|
|
};
|
|
|
|
/* SHIM variables */
|
|
static const efi_guid_t shim_guid = EFI_SHIM_LOCK_GUID;
|
|
static efi_char16_t const shim_MokSBState_name[] = {
|
|
'M', 'o', 'k', 'S', 'B', 'S', 't', 'a', 't', 'e', 0
|
|
};
|
|
|
|
#define get_efi_var(name, vendor, ...) \
|
|
efi_call_runtime(get_variable, \
|
|
(efi_char16_t *)(name), (efi_guid_t *)(vendor), \
|
|
__VA_ARGS__);
|
|
|
|
/*
|
|
* Determine whether we're in secure boot mode.
|
|
*/
|
|
enum efi_secureboot_mode efi_get_secureboot(efi_system_table_t *sys_table_arg)
|
|
{
|
|
u32 attr;
|
|
u8 secboot, setupmode, moksbstate;
|
|
unsigned long size;
|
|
efi_status_t status;
|
|
|
|
size = sizeof(secboot);
|
|
status = get_efi_var(efi_SecureBoot_name, &efi_variable_guid,
|
|
NULL, &size, &secboot);
|
|
if (status == EFI_NOT_FOUND)
|
|
return efi_secureboot_mode_disabled;
|
|
if (status != EFI_SUCCESS)
|
|
goto out_efi_err;
|
|
|
|
size = sizeof(setupmode);
|
|
status = get_efi_var(efi_SetupMode_name, &efi_variable_guid,
|
|
NULL, &size, &setupmode);
|
|
if (status != EFI_SUCCESS)
|
|
goto out_efi_err;
|
|
|
|
if (secboot == 0 || setupmode == 1)
|
|
return efi_secureboot_mode_disabled;
|
|
|
|
/*
|
|
* See if a user has put the shim into insecure mode. If so, and if the
|
|
* variable doesn't have the runtime attribute set, we might as well
|
|
* honor that.
|
|
*/
|
|
size = sizeof(moksbstate);
|
|
status = get_efi_var(shim_MokSBState_name, &shim_guid,
|
|
&attr, &size, &moksbstate);
|
|
|
|
/* If it fails, we don't care why. Default to secure */
|
|
if (status != EFI_SUCCESS)
|
|
goto secure_boot_enabled;
|
|
if (!(attr & EFI_VARIABLE_RUNTIME_ACCESS) && moksbstate == 1)
|
|
return efi_secureboot_mode_disabled;
|
|
|
|
secure_boot_enabled:
|
|
pr_efi(sys_table_arg, "UEFI Secure Boot is enabled.\n");
|
|
return efi_secureboot_mode_enabled;
|
|
|
|
out_efi_err:
|
|
pr_efi_err(sys_table_arg, "Could not determine UEFI Secure Boot status.\n");
|
|
return efi_secureboot_mode_unknown;
|
|
}
|