summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/include/vboot_api.h2
-rw-r--r--firmware/lib/include/load_kernel_fw.h2
-rw-r--r--firmware/lib/vboot_api_kernel.c2
-rw-r--r--firmware/lib/vboot_kernel.c3
4 files changed, 9 insertions, 0 deletions
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h
index af61eedd..9c040c06 100644
--- a/firmware/include/vboot_api.h
+++ b/firmware/include/vboot_api.h
@@ -335,6 +335,8 @@ typedef struct VbSelectAndLoadKernelParams {
uint32_t bootloader_size;
/* UniquePartitionGuid for boot partition */
uint8_t partition_guid[16];
+ /* Flags passed in by signer */
+ uint32_t flags;
/*
* TODO: in H2C, all that pretty much just gets passed to the
* bootloader as KernelBootloaderOptions, though the disk handle is
diff --git a/firmware/lib/include/load_kernel_fw.h b/firmware/lib/include/load_kernel_fw.h
index 46081912..da418a33 100644
--- a/firmware/lib/include/load_kernel_fw.h
+++ b/firmware/lib/include/load_kernel_fw.h
@@ -70,6 +70,8 @@ typedef struct LoadKernelParams {
uint64_t bootloader_size;
/* UniquePartitionGuid for boot partition */
uint8_t partition_guid[16];
+ /* Flags passed in by signer */
+ uint32_t flags;
} LoadKernelParams;
/**
diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c
index d394d5cc..4769089e 100644
--- a/firmware/lib/vboot_api_kernel.c
+++ b/firmware/lib/vboot_api_kernel.c
@@ -984,6 +984,7 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams *cparams,
kparams->partition_number = 0;
kparams->bootloader_address = 0;
kparams->bootloader_size = 0;
+ kparams->flags = 0;
Memset(kparams->partition_guid, 0, sizeof(kparams->partition_guid));
cparams->bmp = NULL;
@@ -1152,6 +1153,7 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams *cparams,
kparams->partition_number = (uint32_t)p.partition_number;
kparams->bootloader_address = p.bootloader_address;
kparams->bootloader_size = (uint32_t)p.bootloader_size;
+ kparams->flags = p.flags;
Memcpy(kparams->partition_guid, p.partition_guid,
sizeof(kparams->partition_guid));
diff --git a/firmware/lib/vboot_kernel.c b/firmware/lib/vboot_kernel.c
index 08b8a23b..9ea054c3 100644
--- a/firmware/lib/vboot_kernel.c
+++ b/firmware/lib/vboot_kernel.c
@@ -67,6 +67,7 @@ VbError_t LoadKernel(LoadKernelParams *params, VbCommonParams *cparams)
params->partition_number = 0;
params->bootloader_address = 0;
params->bootloader_size = 0;
+ params->flags = 0;
/* Calculate switch positions and boot mode */
rec_switch = (BOOT_FLAG_RECOVERY & params->boot_flags ? 1 : 0);
@@ -437,6 +438,8 @@ VbError_t LoadKernel(LoadKernelParams *params, VbCommonParams *cparams)
*/
params->bootloader_address = preamble->bootloader_address;
params->bootloader_size = preamble->bootloader_size;
+ if (VbKernelHasFlags(preamble) == VBOOT_SUCCESS)
+ params->flags = preamble->flags;
/* Update GPT to note this is the kernel we're trying */
GptUpdateKernelEntry(&gpt, GPT_UPDATE_ENTRY_TRY);