| Index: firmware/lib/vboot_kernel.c
|
| diff --git a/firmware/lib/vboot_kernel.c b/firmware/lib/vboot_kernel.c
|
| index faa9c48a7204da331204446767a4cefebf877c4f..84f6615c946f29015b79b18b23c084f64aab58c8 100644
|
| --- a/firmware/lib/vboot_kernel.c
|
| +++ b/firmware/lib/vboot_kernel.c
|
| @@ -18,6 +18,7 @@
|
| #include "vboot_common.h"
|
|
|
| #define KBUF_SIZE 65536 /* Bytes to read at start of kernel partition */
|
| +#define LOWEST_TPM_VERSION 0xffffffff
|
|
|
| typedef enum BootMode {
|
| kBootNormal, /* Normal firmware */
|
| @@ -132,7 +133,7 @@ int LoadKernel(LoadKernelParams* params) {
|
| int good_partition = -1;
|
| int good_partition_key_block_valid = 0;
|
| uint32_t tpm_version = 0;
|
| - uint64_t lowest_version = 0xFFFFFFFF;
|
| + uint64_t lowest_version = LOWEST_TPM_VERSION;
|
| int rec_switch, dev_switch;
|
| BootMode boot_mode;
|
| uint32_t test_err = 0;
|
| @@ -380,6 +381,10 @@ int LoadKernel(LoadKernelParams* params) {
|
| /* Check for lowest version from a valid header. */
|
| if (key_block_valid && lowest_version > combined_version)
|
| lowest_version = combined_version;
|
| + else {
|
| + VBDEBUG(("Key block valid: %d\n", key_block_valid));
|
| + VBDEBUG(("Combined version: %" PRIu64 "\n", combined_version));
|
| + }
|
|
|
| /* If we already have a good kernel, no need to read another
|
| * one; we only needed to look at the versions to check for
|
| @@ -506,7 +511,9 @@ int LoadKernel(LoadKernelParams* params) {
|
| * mode, the TPM stays PP-unlocked, so anything we write gets blown away
|
| * by the firmware when we go back to normal mode. */
|
| VBDEBUG(("Boot_flags = not recovery\n"));
|
| - if (lowest_version > tpm_version) {
|
| +
|
| + if ((lowest_version > tpm_version) &&
|
| + (lowest_version != LOWEST_TPM_VERSION)) {
|
| status = RollbackKernelWrite((uint32_t)lowest_version);
|
| if (0 != status) {
|
| VBDEBUG(("Error writing kernel versions to TPM.\n"));
|
|
|