vboot: Introduce handy vboot reboot functions
This patch groups vboot context, recovery reason and subcode saving, and reboot calls into two handy functions: - vboot_save_and_reboot() - save context and reboot - vboot_fail_and_reboot() - store recovery reason and call function above Signed-off-by: Jakub Czapiga <jacz@semihalf.com> Change-Id: Ie29410e8985e7cf19bd8d4cccc393b050ca1f1c5 Reviewed-on: https://review.coreboot.org/c/coreboot/+/69208 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Eric Lai <eric_lai@quanta.corp-partner.google.com> Reviewed-by: Yu-Ping Wu <yupingso@google.com>
This commit is contained in:
committed by
Felix Held
parent
699b833bd7
commit
605f793af8
@@ -327,30 +327,22 @@ void verstage_main(void)
|
||||
goto verstage_main_exit;
|
||||
}
|
||||
|
||||
printk(BIOS_INFO, "Reboot requested (%x)\n", rv);
|
||||
vboot_save_data(ctx);
|
||||
vboot_reboot();
|
||||
vboot_save_and_reboot(ctx, rv);
|
||||
}
|
||||
|
||||
/* Determine which firmware slot to boot (based on NVRAM) */
|
||||
printk(BIOS_INFO, "Phase 2\n");
|
||||
rv = vb2api_fw_phase2(ctx);
|
||||
if (rv) {
|
||||
printk(BIOS_INFO, "Reboot requested (%x)\n", rv);
|
||||
vboot_save_data(ctx);
|
||||
vboot_reboot();
|
||||
}
|
||||
if (rv)
|
||||
vboot_save_and_reboot(ctx, rv);
|
||||
|
||||
/* Try that slot (verify its keyblock and preamble) */
|
||||
printk(BIOS_INFO, "Phase 3\n");
|
||||
timestamp_add_now(TS_VERIFY_SLOT_START);
|
||||
rv = vb2api_fw_phase3(ctx);
|
||||
timestamp_add_now(TS_VERIFY_SLOT_END);
|
||||
if (rv) {
|
||||
printk(BIOS_INFO, "Reboot requested (%x)\n", rv);
|
||||
vboot_save_data(ctx);
|
||||
vboot_reboot();
|
||||
}
|
||||
if (rv)
|
||||
vboot_save_and_reboot(ctx, rv);
|
||||
|
||||
printk(BIOS_INFO, "Phase 4\n");
|
||||
rv = vboot_locate_firmware(ctx, &fw_body);
|
||||
@@ -359,22 +351,17 @@ void verstage_main(void)
|
||||
"Failed to read FMAP to locate firmware");
|
||||
|
||||
rv = hash_body(ctx, &fw_body);
|
||||
if (rv)
|
||||
vboot_save_and_reboot(ctx, rv);
|
||||
vboot_save_data(ctx);
|
||||
if (rv) {
|
||||
printk(BIOS_INFO, "Reboot requested (%x)\n", rv);
|
||||
vboot_reboot();
|
||||
}
|
||||
|
||||
/* Only extend PCRs once on boot. */
|
||||
if (!(ctx->flags & VB2_CONTEXT_S3_RESUME)) {
|
||||
timestamp_add_now(TS_TPMPCR_START);
|
||||
rv = extend_pcrs(ctx);
|
||||
if (rv) {
|
||||
printk(BIOS_WARNING,
|
||||
"Failed to extend TPM PCRs (%#x)\n", rv);
|
||||
vb2api_fail(ctx, VB2_RECOVERY_RO_TPM_U_ERROR, rv);
|
||||
vboot_save_data(ctx);
|
||||
vboot_reboot();
|
||||
printk(BIOS_WARNING, "Failed to extend TPM PCRs (%#x)\n", rv);
|
||||
vboot_fail_and_reboot(ctx, VB2_RECOVERY_RO_TPM_U_ERROR, rv);
|
||||
}
|
||||
timestamp_add_now(TS_TPMPCR_END);
|
||||
}
|
||||
@@ -385,9 +372,7 @@ void verstage_main(void)
|
||||
rv = antirollback_lock_space_firmware();
|
||||
if (rv) {
|
||||
printk(BIOS_INFO, "Failed to lock TPM (%x)\n", rv);
|
||||
vb2api_fail(ctx, VB2_RECOVERY_RO_TPM_L_ERROR, 0);
|
||||
vboot_save_data(ctx);
|
||||
vboot_reboot();
|
||||
vboot_fail_and_reboot(ctx, VB2_RECOVERY_RO_TPM_L_ERROR, 0);
|
||||
}
|
||||
timestamp_add_now(TS_TPMLOCK_END);
|
||||
|
||||
@@ -395,12 +380,8 @@ void verstage_main(void)
|
||||
if (CONFIG(VBOOT_HAS_REC_HASH_SPACE)) {
|
||||
rv = antirollback_lock_space_mrc_hash(MRC_REC_HASH_NV_INDEX);
|
||||
if (rv) {
|
||||
printk(BIOS_INFO, "Failed to lock rec hash space(%x)\n",
|
||||
rv);
|
||||
vb2api_fail(ctx, VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR,
|
||||
0);
|
||||
vboot_save_data(ctx);
|
||||
vboot_reboot();
|
||||
printk(BIOS_INFO, "Failed to lock rec hash space(%x)\n", rv);
|
||||
vboot_fail_and_reboot(ctx, VB2_RECOVERY_RO_TPM_REC_HASH_L_ERROR, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user