| Index: firmware/lib/vboot_firmware.c
|
| diff --git a/firmware/lib/vboot_firmware.c b/firmware/lib/vboot_firmware.c
|
| index e8c8a86fa902d4cb5f52954a46d2eed9ebb6a2b0..036441fb7f6836c1e553c4cee1fada8624bc7380 100644
|
| --- a/firmware/lib/vboot_firmware.c
|
| +++ b/firmware/lib/vboot_firmware.c
|
| @@ -116,10 +116,7 @@ int LoadFirmware(LoadFirmwareParams* params) {
|
| uint8_t* body_digest;
|
|
|
| /* If try B count is non-zero try firmware B first */
|
| - index = (try_b_count ? i : 1 - i);
|
| -
|
| - /* Verify the key block */
|
| - VBPERFSTART("VB_VKB");
|
| + index = (try_b_count ? 1 - i : i);
|
| if (0 == index) {
|
| key_block = (VbKeyBlockHeader*)params->verification_block_0;
|
| vblock_size = params->verification_size_0;
|
| @@ -127,14 +124,10 @@ int LoadFirmware(LoadFirmwareParams* params) {
|
| key_block = (VbKeyBlockHeader*)params->verification_block_1;
|
| vblock_size = params->verification_size_1;
|
| }
|
| - if ((0 != KeyBlockVerify(key_block, vblock_size, root_key, 0))) {
|
| - VBDEBUG(("Key block verification failed.\n"));
|
| - VBPERFEND("VB_VKB");
|
| - continue;
|
| - }
|
| - VBPERFEND("VB_VKB");
|
|
|
| - /* Check the key block flags against the current boot mode. */
|
| + /* Check the key block flags against the current boot mode. Do this
|
| + * before verifying the key block, since flags are faster to check than
|
| + * the RSA signature. */
|
| if (!(key_block->key_block_flags &
|
| (is_dev ? KEY_BLOCK_FLAG_DEVELOPER_1 :
|
| KEY_BLOCK_FLAG_DEVELOPER_0))) {
|
| @@ -147,6 +140,15 @@ int LoadFirmware(LoadFirmwareParams* params) {
|
| continue;
|
| }
|
|
|
| + /* Verify the key block */
|
| + VBPERFSTART("VB_VKB");
|
| + if ((0 != KeyBlockVerify(key_block, vblock_size, root_key, 0))) {
|
| + VBDEBUG(("Key block verification failed.\n"));
|
| + VBPERFEND("VB_VKB");
|
| + continue;
|
| + }
|
| + VBPERFEND("VB_VKB");
|
| +
|
| /* Check for rollback of key version. */
|
| key_version = key_block->data_key.key_version;
|
| if (key_version < (tpm_version >> 16)) {
|
|
|