Index: firmware/lib/vboot_kernel.c |
diff --git a/firmware/lib/vboot_kernel.c b/firmware/lib/vboot_kernel.c |
index 609fe9e0f928806905a092f18c4e43a8ff516f86..c04538039bb8d8a93671e23b57e0be948db193d5 100644 |
--- a/firmware/lib/vboot_kernel.c |
+++ b/firmware/lib/vboot_kernel.c |
@@ -112,13 +112,11 @@ int WriteAndFreeGptData(GptData* gptdata) { |
__pragma(warning(disable: 4127)) |
int LoadKernel(LoadKernelParams* params) { |
- |
- VbPublicKey* kernel_subkey = (VbPublicKey*)params->header_sign_key_blob; |
- |
+ VbPublicKey* kernel_subkey; |
GptData gpt; |
uint64_t part_start, part_size; |
- uint64_t blba = params->bytes_per_lba; |
- uint64_t kbuf_sectors = KBUF_SIZE / blba; |
+ uint64_t blba; |
+ uint64_t kbuf_sectors; |
uint8_t* kbuf = NULL; |
int found_partitions = 0; |
int good_partition = -1; |
@@ -126,11 +124,30 @@ int LoadKernel(LoadKernelParams* params) { |
uint16_t tpm_kernel_version = 0; |
uint64_t lowest_key_version = 0xFFFF; |
uint64_t lowest_kernel_version = 0xFFFF; |
- int is_dev = (BOOT_FLAG_DEVELOPER & params->boot_flags ? 1 : 0); |
- int is_rec = (BOOT_FLAG_RECOVERY & params->boot_flags ? 1 : 0); |
- int is_normal = (!is_dev && !is_rec); |
+ int is_dev; |
+ int is_rec; |
+ int is_normal; |
uint32_t status; |
+ /* Sanity Checks */ |
+ if (!params || |
+ !params->header_sign_key_blob || |
+ !params->bytes_per_lba || |
+ !params->ending_lba || |
+ !params->kernel_buffer || |
+ !params->kernel_buffer_size) { |
+ VBDEBUG(("LoadKernel() called with invalid params\n")); |
+ return LOAD_KERNEL_INVALID; |
+ } |
+ |
+ /* Initialization */ |
+ kernel_subkey = (VbPublicKey*)params->header_sign_key_blob; |
+ blba = params->bytes_per_lba; |
+ kbuf_sectors = KBUF_SIZE / blba; |
+ is_dev = (BOOT_FLAG_DEVELOPER & params->boot_flags ? 1 : 0); |
+ is_rec = (BOOT_FLAG_RECOVERY & params->boot_flags ? 1 : 0); |
+ is_normal = (!is_dev && !is_rec); |
+ |
/* Clear output params in case we fail */ |
params->partition_number = 0; |
params->bootloader_address = 0; |