diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/vb2_api_tests.c | 81 | ||||
-rw-r--r-- | tests/vb2_nvstorage_tests.c | 1 | ||||
-rw-r--r-- | tests/vboot_nvstorage_test.c | 1 |
3 files changed, 82 insertions, 1 deletions
diff --git a/tests/vb2_api_tests.c b/tests/vb2_api_tests.c index 2978c3fd..adc536b6 100644 --- a/tests/vb2_api_tests.c +++ b/tests/vb2_api_tests.c @@ -131,7 +131,6 @@ static void phase1_tests(void) TEST_NEQ(cc.flags & VB2_CONTEXT_RECOVERY_MODE, 0, " recovery flag"); TEST_NEQ(cc.flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); - reset_common_data(FOR_MISC); retval_vb2_check_dev_switch = VB2_ERROR_MOCK; TEST_EQ(vb2api_fw_phase1(&cc), VB2_ERROR_API_PHASE1_RECOVERY, @@ -149,6 +148,86 @@ static void phase1_tests(void) " recovery reason"); TEST_NEQ(cc.flags & VB2_CONTEXT_RECOVERY_MODE, 0, " recovery flag"); TEST_NEQ(cc.flags & VB2_CONTEXT_CLEAR_RAM, 0, " clear ram flag"); + + /* Test secdata-requested reboot */ + reset_common_data(FOR_MISC); + cc.flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + TEST_EQ(vb2api_fw_phase1(&cc), VB2_ERROR_API_PHASE1_SECDATA_REBOOT, + "phase1 secdata reboot normal"); + TEST_EQ(sd->recovery_reason, 0, " recovery reason"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), + 0, " recovery request"); + + reset_common_data(FOR_MISC); + vb2_nv_set(&cc, VB2_NV_TPM_REQUESTED_REBOOT, 1); + TEST_SUCC(vb2api_fw_phase1(&cc), "phase1 secdata reboot back normal"); + TEST_EQ(sd->recovery_reason, 0, " recovery reason"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_TPM_REQUESTED_REBOOT), + 0, " tpm reboot request"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), + 0, " recovery request"); + + reset_common_data(FOR_MISC); + cc.flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + memset(cc.secdata, 0, sizeof(cc.secdata)); + TEST_EQ(vb2api_fw_phase1(&cc), VB2_ERROR_API_PHASE1_SECDATA_REBOOT, + "phase1 secdata reboot normal, secdata blank"); + TEST_EQ(sd->recovery_reason, 0, " recovery reason"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), + 0, " recovery request"); + + reset_common_data(FOR_MISC); + cc.flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + vb2_nv_set(&cc, VB2_NV_TPM_REQUESTED_REBOOT, 1); + TEST_EQ(vb2api_fw_phase1(&cc), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 secdata reboot normal again"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_RO_TPM_REBOOT, + " recovery reason"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), + 0, " recovery request"); + + reset_common_data(FOR_MISC); + cc.flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + vb2_nv_set(&cc, VB2_NV_RECOVERY_REQUEST, VB2_RECOVERY_RO_UNSPECIFIED); + TEST_EQ(vb2api_fw_phase1(&cc), VB2_ERROR_API_PHASE1_SECDATA_REBOOT, + "phase1 secdata reboot recovery"); + /* Recovery reason isn't set this boot because we're rebooting first */ + TEST_EQ(sd->recovery_reason, 0, " recovery reason not set THIS boot"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RO_UNSPECIFIED, " recovery request not cleared"); + + reset_common_data(FOR_MISC); + vb2_nv_set(&cc, VB2_NV_TPM_REQUESTED_REBOOT, 1); + vb2_nv_set(&cc, VB2_NV_RECOVERY_REQUEST, VB2_RECOVERY_RO_UNSPECIFIED); + TEST_EQ(vb2api_fw_phase1(&cc), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 secdata reboot back recovery"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_RO_UNSPECIFIED, + " recovery reason"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_TPM_REQUESTED_REBOOT), + 0, " tpm reboot request"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), 0, + " recovery request cleared"); + + reset_common_data(FOR_MISC); + cc.flags |= VB2_CONTEXT_SECDATA_WANTS_REBOOT; + vb2_nv_set(&cc, VB2_NV_TPM_REQUESTED_REBOOT, 1); + vb2_nv_set(&cc, VB2_NV_RECOVERY_REQUEST, VB2_RECOVERY_RO_UNSPECIFIED); + TEST_EQ(vb2api_fw_phase1(&cc), VB2_ERROR_API_PHASE1_RECOVERY, + "phase1 secdata reboot recovery again"); + TEST_EQ(sd->recovery_reason, VB2_RECOVERY_RO_UNSPECIFIED, + " recovery reason"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_TPM_REQUESTED_REBOOT), + 1, " tpm reboot request"); + TEST_EQ(vb2_nv_get(&cc, VB2_NV_RECOVERY_REQUEST), 0, + " recovery request cleared"); } static void phase2_tests(void) diff --git a/tests/vb2_nvstorage_tests.c b/tests/vb2_nvstorage_tests.c index 02c8acc8..0bf58b61 100644 --- a/tests/vb2_nvstorage_tests.c +++ b/tests/vb2_nvstorage_tests.c @@ -47,6 +47,7 @@ static struct nv_field nvfields[] = { {VB2_NV_DISABLE_DEV_REQUEST, 0, 1, 0, "disable dev request"}, {VB2_NV_CLEAR_TPM_OWNER_REQUEST, 0, 1, 0, "clear tpm owner request"}, {VB2_NV_CLEAR_TPM_OWNER_DONE, 0, 1, 0, "clear tpm owner done"}, + {VB2_NV_TPM_REQUESTED_REBOOT, 0, 1, 0, "tpm requested reboot"}, {VB2_NV_OPROM_NEEDED, 0, 1, 0, "oprom needed"}, {VB2_NV_BACKUP_NVRAM_REQUEST, 0, 1, 0, "backup nvram request"}, {VB2_NV_FASTBOOT_UNLOCK_IN_FW, 0, 1, 0, "fastboot unlock in fw"}, diff --git a/tests/vboot_nvstorage_test.c b/tests/vboot_nvstorage_test.c index bbded635..a82a7429 100644 --- a/tests/vboot_nvstorage_test.c +++ b/tests/vboot_nvstorage_test.c @@ -37,6 +37,7 @@ static VbNvField nvfields[] = { {VBNV_DISABLE_DEV_REQUEST, 0, 1, 0, "disable dev request"}, {VBNV_CLEAR_TPM_OWNER_REQUEST, 0, 1, 0, "clear tpm owner request"}, {VBNV_CLEAR_TPM_OWNER_DONE, 0, 1, 0, "clear tpm owner done"}, + {VBNV_TPM_REQUESTED_REBOOT, 0, 1, 0, "tpm requested reboot"}, {VBNV_OPROM_NEEDED, 0, 1, 0, "oprom needed"}, {VBNV_FW_TRY_COUNT, 0, 8, 15, "try count"}, {VBNV_FW_TRY_NEXT, 0, 1, 0, "try next"}, |