mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 10:39:08 +00:00
efi_loader: pre-seed UEFI variables
Include a file with the initial values for non-volatile UEFI variables into the U-Boot binary. If this variable is set, changes to variable PK will not be allowed. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
parent
99bfab8b58
commit
7dda16343d
7 changed files with 73 additions and 10 deletions
|
@ -5,12 +5,15 @@
|
|||
* Copyright (c) 2017 Rob Clark
|
||||
*/
|
||||
|
||||
#define LOG_CATEGORY LOGC_EFI
|
||||
|
||||
#include <common.h>
|
||||
#include <efi_loader.h>
|
||||
#include <efi_variable.h>
|
||||
#include <env.h>
|
||||
#include <env_internal.h>
|
||||
#include <hexdump.h>
|
||||
#include <log.h>
|
||||
#include <malloc.h>
|
||||
#include <rtc.h>
|
||||
#include <search.h>
|
||||
|
@ -18,7 +21,7 @@
|
|||
#include <crypto/pkcs7_parser.h>
|
||||
#include <linux/compat.h>
|
||||
#include <u-boot/crc.h>
|
||||
|
||||
#include <asm/sections.h>
|
||||
|
||||
#ifdef CONFIG_EFI_SECURE_BOOT
|
||||
static u8 pkcs7_hdr[] = {
|
||||
|
@ -365,10 +368,16 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
|
|||
delete = !append && (!data_size || !attributes);
|
||||
|
||||
/* check attributes */
|
||||
var_type = efi_auth_var_get_type(variable_name, vendor);
|
||||
if (var) {
|
||||
if (ro_check && (var->attr & EFI_VARIABLE_READ_ONLY))
|
||||
return EFI_WRITE_PROTECTED;
|
||||
|
||||
if (IS_ENABLED(CONFIG_EFI_VARIABLES_PRESEED)) {
|
||||
if (var_type != EFI_AUTH_VAR_NONE)
|
||||
return EFI_WRITE_PROTECTED;
|
||||
}
|
||||
|
||||
/* attributes won't be changed */
|
||||
if (!delete &&
|
||||
((ro_check && var->attr != attributes) ||
|
||||
|
@ -386,7 +395,6 @@ efi_status_t efi_set_variable_int(u16 *variable_name, const efi_guid_t *vendor,
|
|||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
var_type = efi_auth_var_get_type(variable_name, vendor);
|
||||
if (var_type != EFI_AUTH_VAR_NONE) {
|
||||
/* authentication is mandatory */
|
||||
if (!(attributes &
|
||||
|
@ -589,5 +597,12 @@ efi_status_t efi_init_variables(void)
|
|||
if (ret != EFI_SUCCESS)
|
||||
return ret;
|
||||
|
||||
if (IS_ENABLED(CONFIG_EFI_VARIABLES_PRESEED)) {
|
||||
ret = efi_var_restore((struct efi_var_file *)
|
||||
__efi_var_file_begin);
|
||||
if (ret != EFI_SUCCESS)
|
||||
log_err("Invalid EFI variable seed\n");
|
||||
}
|
||||
|
||||
return efi_var_from_file();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue