Index: firmware/lib/vboot_kernel.c |
diff --git a/firmware/lib/vboot_kernel.c b/firmware/lib/vboot_kernel.c |
index 1440eb443f2d9dc37a36f613ce55728a71dfcedb..ea0fc295480e46c49921b98d52113d19386b7b38 100644 |
--- a/firmware/lib/vboot_kernel.c |
+++ b/firmware/lib/vboot_kernel.c |
@@ -147,7 +147,7 @@ int LoadKernel(LoadKernelParams* params) { |
do { |
/* Read GPT data */ |
- gpt.sector_bytes = blba; |
+ gpt.sector_bytes = (uint32_t)blba; |
gpt.drive_sectors = params->ending_lba + 1; |
if (0 != AllocAndReadGptData(&gpt)) { |
debug("Unable to read GPT data\n"); |
@@ -306,14 +306,18 @@ int LoadKernel(LoadKernelParams* params) { |
/* If we're still here, the kernel is valid. */ |
/* Save the first good partition we find; that's the one we'll boot */ |
debug("Partiton is good.\n"); |
- good_partition = gpt.current_kernel; |
+ /* TODO: GPT partitions start at 1, but cgptlib starts them at 0. |
+ * Adjust here, until cgptlib is fixed. */ |
+ good_partition = gpt.current_kernel + 1; |
params->partition_number = gpt.current_kernel; |
params->bootloader_address = preamble->bootloader_address; |
params->bootloader_size = preamble->bootloader_size; |
/* If we're in developer or recovery mode, there's no rollback |
* protection, so we can stop at the first valid kernel. */ |
- if (!is_normal) |
+ if (!is_normal) { |
+ debug("Boot_flags = !is_normal\n"); |
break; |
+ } |
/* Otherwise, we're in normal boot mode, so we do care about the |
* key index in the TPM. If the good partition's key version is |
@@ -321,8 +325,10 @@ int LoadKernel(LoadKernelParams* params) { |
* can stop now. Otherwise, we'll check all the other headers |
* to see if they contain a newer key. */ |
if (key_version == tpm_key_version && |
- preamble->kernel_version == tpm_kernel_version) |
+ preamble->kernel_version == tpm_kernel_version) { |
+ debug("Same key version\n"); |
break; |
+ } |
} /* while(GptNextKernelEntry) */ |
} while(0); |
@@ -335,6 +341,7 @@ int LoadKernel(LoadKernelParams* params) { |
/* Handle finding a good partition */ |
if (good_partition >= 0) { |
+ debug("Good_partition >= 0\n"); |
/* See if we need to update the TPM */ |
if (is_normal) { |
@@ -344,12 +351,13 @@ int LoadKernel(LoadKernelParams* params) { |
* forward. In recovery mode, the TPM stays PP-unlocked, so |
* anything we write gets blown away by the firmware when we go |
* back to normal mode. */ |
+ debug("Boot_flags = is_normal\n"); |
if ((lowest_key_version > tpm_key_version) || |
(lowest_key_version == tpm_key_version && |
lowest_kernel_version > tpm_kernel_version)) { |
if (0 != WriteStoredVersions(KERNEL_VERSIONS, |
- lowest_key_version, |
- lowest_kernel_version)) |
+ (uint16_t)lowest_key_version, |
+ (uint16_t)lowest_kernel_version)) |
return LOAD_KERNEL_RECOVERY; |
} |
} |
@@ -363,6 +371,7 @@ int LoadKernel(LoadKernelParams* params) { |
* |
* If we're already in recovery mode, we need to leave PP unlocked, |
* so don't lock the kernel versions. */ |
+ debug("Lock kernel versions\n"); |
if (0 != LockKernelVersionsByLockingPP()) |
return LOAD_KERNEL_RECOVERY; |
} |