diff options
author | Randall Spangler <rspangler@chromium.org> | 2017-11-27 15:37:13 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-12-11 15:16:25 -0800 |
commit | dff5852c2f41c240842b49549b212c36287d5e26 (patch) | |
tree | 20f31422c7dd6868ce58b156634ab5290963acfc /tests | |
parent | 626340420e2ebc42f8f24b0b2c3d56cc73dc6e60 (diff) | |
download | vboot-dff5852c2f41c240842b49549b212c36287d5e26.tar.gz |
vboot: Use 2nvstorage instead of vboot_nvstorage
Remove the old vboot1 vboot_nvstorage library (VbNv*() functions) and
use the vboot2 library (vb2_nv_*()) instead. This is needed in
preparation for moving to 64-byte records; no sense in implementing
that change twice...
Should be (better be) no change in system behavior.
BUG=chromium:789276
BRANCH=none
TEST=make runtests
compare output of crossystem before/after change (should be identical)
Change-Id: I10f9975b0824263064b9a74a3c6daadcecc085d3
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/794732
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ec_sync_tests.c | 19 | ||||
-rw-r--r-- | tests/vboot_api_devmode_tests.c | 10 | ||||
-rw-r--r-- | tests/vboot_api_kernel2_tests.c | 13 | ||||
-rw-r--r-- | tests/vboot_api_kernel4_tests.c | 40 | ||||
-rw-r--r-- | tests/vboot_api_kernel5_tests.c | 15 | ||||
-rw-r--r-- | tests/vboot_api_kernel6_tests.c | 1 | ||||
-rw-r--r-- | tests/vboot_api_kernel_tests.c | 12 | ||||
-rw-r--r-- | tests/vboot_audio_tests.c | 1 | ||||
-rw-r--r-- | tests/vboot_display_tests.c | 1 | ||||
-rw-r--r-- | tests/vboot_kernel_tests.c | 36 | ||||
-rw-r--r-- | tests/vboot_nvstorage_test.c | 208 | ||||
-rw-r--r-- | tests/vboot_region_tests.c | 10 | ||||
-rw-r--r-- | tests/verify_kernel.c | 19 |
13 files changed, 69 insertions, 316 deletions
diff --git a/tests/ec_sync_tests.c b/tests/ec_sync_tests.c index 1d5f8c1b..a8c9b78c 100644 --- a/tests/ec_sync_tests.c +++ b/tests/ec_sync_tests.c @@ -23,7 +23,6 @@ #include "vboot_common.h" #include "vboot_display.h" #include "vboot_kernel.h" -#include "vboot_nvstorage.h" #include "vboot_struct.h" /* Mock data */ @@ -250,28 +249,28 @@ static void VbSoftwareSyncTest(void) ResetMocks(); in_rw_retval = VBERROR_SIMULATED; test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, - VBNV_RECOVERY_EC_UNKNOWN_IMAGE, "Unknown EC image"); + VB2_RECOVERY_EC_UNKNOWN_IMAGE, "Unknown EC image"); /* Calculate hashes */ ResetMocks(); mock_ec_rw_hash_size = 0; test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, - VBNV_RECOVERY_EC_HASH_FAILED, "Bad EC hash"); + VB2_RECOVERY_EC_HASH_FAILED, "Bad EC hash"); ResetMocks(); mock_ec_rw_hash_size = 16; test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, - VBNV_RECOVERY_EC_HASH_SIZE, "Bad EC hash size"); + VB2_RECOVERY_EC_HASH_SIZE, "Bad EC hash size"); ResetMocks(); want_ec_hash_size = 0; test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, - VBNV_RECOVERY_EC_EXPECTED_HASH, "Bad precalculated hash"); + VB2_RECOVERY_EC_EXPECTED_HASH, "Bad precalculated hash"); ResetMocks(); want_ec_hash_size = 16; test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, - VBNV_RECOVERY_EC_HASH_SIZE, + VB2_RECOVERY_EC_HASH_SIZE, "Hash size mismatch"); ResetMocks(); @@ -343,7 +342,7 @@ static void VbSoftwareSyncTest(void) mock_ec_rw_hash[0]++; update_hash++; test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, - VBNV_RECOVERY_EC_UPDATE, "updated hash mismatch"); + VB2_RECOVERY_EC_UPDATE, "updated hash mismatch"); TEST_EQ(ec_rw_protected, 0, " ec rw protected"); TEST_EQ(ec_run_image, 0, " ec run image"); TEST_EQ(ec_rw_updated, 1, " ec rw updated"); @@ -362,7 +361,7 @@ static void VbSoftwareSyncTest(void) mock_ec_rw_hash[0]++; update_retval = VBERROR_SIMULATED; test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, - VBNV_RECOVERY_EC_UPDATE, "Update failed"); + VB2_RECOVERY_EC_UPDATE, "Update failed"); ResetMocks(); mock_ec_rw_hash[0]++; @@ -386,7 +385,7 @@ static void VbSoftwareSyncTest(void) ResetMocks(); run_retval = VBERROR_SIMULATED; test_ssync(VBERROR_EC_REBOOT_TO_RO_REQUIRED, - VBNV_RECOVERY_EC_JUMP_RW, "Jump to RW fail"); + VB2_RECOVERY_EC_JUMP_RW, "Jump to RW fail"); ResetMocks(); run_retval = VBERROR_EC_REBOOT_TO_RO_REQUIRED; @@ -396,7 +395,7 @@ static void VbSoftwareSyncTest(void) ResetMocks(); protect_retval = VBERROR_SIMULATED; test_ssync(VBERROR_SIMULATED, - VBNV_RECOVERY_EC_PROTECT, "Protect error"); + VB2_RECOVERY_EC_PROTECT, "Protect error"); /* No longer check for shutdown requested */ ResetMocks(); diff --git a/tests/vboot_api_devmode_tests.c b/tests/vboot_api_devmode_tests.c index 6ec74b29..a65fc269 100644 --- a/tests/vboot_api_devmode_tests.c +++ b/tests/vboot_api_devmode_tests.c @@ -12,6 +12,7 @@ #include "2sysincludes.h" #include "2api.h" +#include "2nvstorage.h" #include "crc32.h" #include "gbb_header.h" #include "host_common.h" @@ -21,7 +22,6 @@ #include "vboot_common.h" #include "vboot_display.h" #include "vboot_kernel.h" -#include "vboot_nvstorage.h" #include "vboot_struct.h" @@ -135,7 +135,6 @@ test_case_t test[] = { /* Mock data */ static VbCommonParams cparams; static struct vb2_context ctx; -static VbNvContext vnc; static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE]; static VbSharedDataHeader* shared = (VbSharedDataHeader*)shared_data; static GoogleBinaryBlockHeader gbb; @@ -161,10 +160,7 @@ static void ResetMocks(void) { cparams.gbb = &gbb; memset(&ctx, 0, sizeof(ctx)); - - memset(&vnc, 0, sizeof(vnc)); - VbNvSetup(&vnc); - VbNvTeardown(&vnc); /* So CRC gets generated */ + vb2_nv_init(&ctx); memset(&shared_data, 0, sizeof(shared_data)); VbSharedDataInit(shared, sizeof(shared_data)); @@ -193,12 +189,10 @@ static void ResetMocks(void) { /* Mocked verification functions */ VbError_t VbExNvStorageRead(uint8_t* buf) { - memcpy(buf, vnc.raw, sizeof(vnc.raw)); return VBERROR_SUCCESS; } VbError_t VbExNvStorageWrite(const uint8_t* buf) { - memcpy(vnc.raw, buf, sizeof(vnc.raw)); return VBERROR_SUCCESS; } diff --git a/tests/vboot_api_kernel2_tests.c b/tests/vboot_api_kernel2_tests.c index 384c978d..da0af9b5 100644 --- a/tests/vboot_api_kernel2_tests.c +++ b/tests/vboot_api_kernel2_tests.c @@ -22,7 +22,6 @@ #include "vboot_common.h" #include "vboot_display.h" #include "vboot_kernel.h" -#include "vboot_nvstorage.h" #include "vboot_struct.h" /* Mock data */ @@ -307,7 +306,7 @@ static void VbBootDevTest(void) * legacy are set */ ResetMocks(); vb2_nv_set(&ctx, VB2_NV_DEV_DEFAULT_BOOT, - VBNV_DEV_DEFAULT_BOOT_LEGACY); + VB2_DEV_DEFAULT_BOOT_LEGACY); vb2_nv_set(&ctx, VB2_NV_DEV_BOOT_LEGACY, 1); TEST_EQ(VbBootDeveloper(&ctx, &cparams), 1002, "Timeout"); TEST_EQ(vbexlegacy_called, 1, " try legacy"); @@ -315,7 +314,7 @@ static void VbBootDevTest(void) /* Proceed to legacy boot mode only if enabled */ ResetMocks(); vb2_nv_set(&ctx, VB2_NV_DEV_DEFAULT_BOOT, - VBNV_DEV_DEFAULT_BOOT_LEGACY); + VB2_DEV_DEFAULT_BOOT_LEGACY); TEST_EQ(VbBootDeveloper(&ctx, &cparams), 1002, "Timeout"); TEST_EQ(vbexlegacy_called, 0, " not legacy"); @@ -323,7 +322,7 @@ static void VbBootDevTest(void) * usb are set */ ResetMocks(); vb2_nv_set(&ctx, VB2_NV_DEV_DEFAULT_BOOT, - VBNV_DEV_DEFAULT_BOOT_USB); + VB2_DEV_DEFAULT_BOOT_USB); vb2_nv_set(&ctx, VB2_NV_DEV_BOOT_USB, 1); vbtlk_retval = VBERROR_SUCCESS - VB_DISK_FLAG_REMOVABLE; TEST_EQ(VbBootDeveloper(&ctx, &cparams), 0, "Ctrl+U USB"); @@ -331,14 +330,14 @@ static void VbBootDevTest(void) /* Proceed to usb boot mode only if enabled */ ResetMocks(); vb2_nv_set(&ctx, VB2_NV_DEV_DEFAULT_BOOT, - VBNV_DEV_DEFAULT_BOOT_USB); + VB2_DEV_DEFAULT_BOOT_USB); TEST_EQ(VbBootDeveloper(&ctx, &cparams), 1002, "Timeout"); /* If no USB tries fixed disk */ ResetMocks(); vb2_nv_set(&ctx, VB2_NV_DEV_BOOT_USB, 1); vb2_nv_set(&ctx, VB2_NV_DEV_DEFAULT_BOOT, - VBNV_DEV_DEFAULT_BOOT_USB); + VB2_DEV_DEFAULT_BOOT_USB); TEST_EQ(VbBootDeveloper(&ctx, &cparams), 1002, "Ctrl+U enabled"); TEST_EQ(vbexlegacy_called, 0, " not legacy"); @@ -369,7 +368,7 @@ static void VbBootDevTest(void) VBERROR_LOAD_KERNEL_RECOVERY, "Space = recovery"); TEST_EQ(vb2_nv_get(&ctx, VB2_NV_RECOVERY_REQUEST), - VBNV_RECOVERY_RW_DEV_SCREEN, " recovery reason"); + VB2_RECOVERY_RW_DEV_SCREEN, " recovery reason"); /* Space asks to disable virtual dev switch */ ResetMocks(); diff --git a/tests/vboot_api_kernel4_tests.c b/tests/vboot_api_kernel4_tests.c index e00c928a..e239192c 100644 --- a/tests/vboot_api_kernel4_tests.c +++ b/tests/vboot_api_kernel4_tests.c @@ -9,6 +9,9 @@ #include <stdio.h> #include <stdlib.h> +#include "2sysincludes.h" +#include "2api.h" +#include "2nvstorage.h" #include "ec_sync.h" #include "gbb_header.h" #include "host_common.h" @@ -18,13 +21,12 @@ #include "vboot_audio.h" #include "vboot_common.h" #include "vboot_kernel.h" -#include "vboot_nvstorage.h" #include "vboot_struct.h" /* Mock data */ +static struct vb2_context ctx; static VbCommonParams cparams; static VbSelectAndLoadKernelParams kparams; -static VbNvContext vnc; static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE]; static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data; static GoogleBinaryBlockHeader gbb; @@ -51,10 +53,9 @@ static void ResetMocks(void) gbb.minor_version = GBB_MINOR_VER; gbb.flags = 0; - memset(&vnc, 0, sizeof(vnc)); - VbNvSetup(&vnc); - VbNvSet(&vnc, VBNV_KERNEL_MAX_ROLLFORWARD, 0xffffffff); - VbNvTeardown(&vnc); /* So CRC gets generated */ + memset(&ctx, 0, sizeof(ctx)); + vb2_nv_init(&ctx); + vb2_nv_set(&ctx, VB2_NV_KERNEL_MAX_ROLLFORWARD, 0xffffffff); memset(&shared_data, 0, sizeof(shared_data)); VbSharedDataInit(shared, sizeof(shared_data)); @@ -71,13 +72,13 @@ static void ResetMocks(void) VbError_t VbExNvStorageRead(uint8_t *buf) { - memcpy(buf, vnc.raw, sizeof(vnc.raw)); + memcpy(buf, ctx.nvdata, sizeof(ctx.nvdata)); return VBERROR_SUCCESS; } VbError_t VbExNvStorageWrite(const uint8_t *buf) { - memcpy(vnc.raw, buf, sizeof(vnc.raw)); + memcpy(ctx.nvdata, buf, sizeof(ctx.nvdata)); return VBERROR_SUCCESS; } @@ -137,11 +138,9 @@ VbError_t VbBootRecovery(struct vb2_context *ctx, VbCommonParams *cparams) static void test_slk(VbError_t retval, int recovery_reason, const char *desc) { - uint32_t u; - TEST_EQ(VbSelectAndLoadKernel(&cparams, &kparams), retval, desc); - VbNvGet(&vnc, VBNV_RECOVERY_REQUEST, &u); - TEST_EQ(u, recovery_reason, " recovery reason"); + TEST_EQ(vb2_nv_get(&ctx, VB2_NV_RECOVERY_REQUEST), + recovery_reason, " recovery reason"); } /* Tests */ @@ -169,7 +168,7 @@ static void VbSlkTest(void) ResetMocks(); rkr_retval = 123; test_slk(VBERROR_TPM_READ_KERNEL, - VBNV_RECOVERY_RW_TPM_R_ERROR, "Read kernel rollback"); + VB2_RECOVERY_RW_TPM_R_ERROR, "Read kernel rollback"); ResetMocks(); new_version = 0x20003; @@ -184,23 +183,20 @@ static void VbSlkTest(void) TEST_EQ(rkr_version, 0x10002, " version"); ResetMocks(); - VbNvSet(&vnc, VBNV_KERNEL_MAX_ROLLFORWARD, 0x30005); - VbNvTeardown(&vnc); + vb2_nv_set(&ctx, VB2_NV_KERNEL_MAX_ROLLFORWARD, 0x30005); new_version = 0x40006; test_slk(0, 0, "Limit max roll forward"); TEST_EQ(rkr_version, 0x30005, " version"); ResetMocks(); - VbNvSet(&vnc, VBNV_KERNEL_MAX_ROLLFORWARD, 0x10001); - VbNvTeardown(&vnc); + vb2_nv_set(&ctx, VB2_NV_KERNEL_MAX_ROLLFORWARD, 0x10001); new_version = 0x40006; test_slk(0, 0, "Max roll forward can't rollback"); TEST_EQ(rkr_version, 0x10002, " version"); ResetMocks(); vbboot_retval = VBERROR_INVALID_KERNEL_FOUND; - VbNvSet(&vnc, VBNV_RECOVERY_REQUEST, 123); - VbNvTeardown(&vnc); + vb2_nv_set(&ctx, VB2_NV_RECOVERY_REQUEST, 123); shared->flags |= VBSD_FWB_TRIED; shared->firmware_index = 1; test_slk(VBERROR_INVALID_KERNEL_FOUND, @@ -210,12 +206,12 @@ static void VbSlkTest(void) new_version = 0x20003; rkw_retval = 123; test_slk(VBERROR_TPM_WRITE_KERNEL, - VBNV_RECOVERY_RW_TPM_W_ERROR, "Write kernel rollback"); + VB2_RECOVERY_RW_TPM_W_ERROR, "Write kernel rollback"); ResetMocks(); rkl_retval = 123; test_slk(VBERROR_TPM_LOCK_KERNEL, - VBNV_RECOVERY_RW_TPM_L_ERROR, "Lock kernel rollback"); + VB2_RECOVERY_RW_TPM_L_ERROR, "Lock kernel rollback"); /* Boot normal */ ResetMocks(); @@ -252,7 +248,7 @@ static void VbSlkTest(void) test_slk(0, 0, "Recovery ignore TPM errors"); ResetMocks(); - shared->recovery_reason = VBNV_RECOVERY_TRAIN_AND_REBOOT; + shared->recovery_reason = VB2_RECOVERY_TRAIN_AND_REBOOT; test_slk(VBERROR_REBOOT_REQUIRED, 0, "Recovery train and reboot"); // todo: rkr/w/l fail ignored if recovery diff --git a/tests/vboot_api_kernel5_tests.c b/tests/vboot_api_kernel5_tests.c index 077c07a4..2d7c2e76 100644 --- a/tests/vboot_api_kernel5_tests.c +++ b/tests/vboot_api_kernel5_tests.c @@ -11,7 +11,9 @@ #include <string.h> #include "2sysincludes.h" +#include "2api.h" #include "2common.h" +#include "2nvstorage.h" #include "2rsa.h" #include "gbb_header.h" #include "host_common.h" @@ -21,10 +23,10 @@ #include "vboot_api.h" #include "vboot_common.h" #include "vboot_kernel.h" -#include "vboot_nvstorage.h" #include "vboot_struct.h" /* Mock data */ +static struct vb2_context ctx; static VbCommonParams cparams; static VbSelectAndLoadKernelParams kparams; static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE]; @@ -37,7 +39,6 @@ static int preamble_verify_fail; static int verify_data_fail; static int unpack_key_fail; -static VbNvContext vnc; static VbKeyBlockHeader kbh; static VbKernelPreambleHeader kph; @@ -61,9 +62,8 @@ static void ResetMocks(void) gbb.minor_version = GBB_MINOR_VER; gbb.flags = 0; - memset(&vnc, 0, sizeof(vnc)); - VbNvSetup(&vnc); - VbNvTeardown(&vnc); /* So CRC gets generated */ + memset(&ctx, 0, sizeof(ctx)); + vb2_nv_init(&ctx); memset(&shared_data, 0, sizeof(shared_data)); VbSharedDataInit(shared, sizeof(shared_data)); @@ -162,7 +162,7 @@ int vb2_verify_data(const uint8_t *data, VbError_t VbExNvStorageRead(uint8_t *buf) { - memcpy(buf, vnc.raw, sizeof(vnc.raw)); + memcpy(buf, ctx.nvdata, sizeof(ctx.nvdata)); return VBERROR_SUCCESS; } @@ -225,8 +225,7 @@ static void VerifyMemoryBootImageTest(void) ResetMocks(); shared->flags = VBSD_BOOT_DEV_SWITCH_ON; key_block_verify_fail = 1; - VbNvSet(&vnc, VBNV_DEV_BOOT_FASTBOOT_FULL_CAP, 1); - VbNvTeardown(&vnc); + vb2_nv_set(&ctx, VB2_NV_DEV_BOOT_FASTBOOT_FULL_CAP, 1); TEST_EQ(VbVerifyMemoryBootImage(&cparams, &kparams, kernel_buffer, kernel_buffer_size), VBERROR_INVALID_KERNEL_FOUND, "Key verify failed"); diff --git a/tests/vboot_api_kernel6_tests.c b/tests/vboot_api_kernel6_tests.c index a24cde80..801ff727 100644 --- a/tests/vboot_api_kernel6_tests.c +++ b/tests/vboot_api_kernel6_tests.c @@ -12,7 +12,6 @@ #include "test_common.h" #include "vboot_api.h" -#include "vboot_nvstorage.h" /* Mock data */ static uint32_t virtual_dev_mode_fail; diff --git a/tests/vboot_api_kernel_tests.c b/tests/vboot_api_kernel_tests.c index 3214d442..dd63bb4b 100644 --- a/tests/vboot_api_kernel_tests.c +++ b/tests/vboot_api_kernel_tests.c @@ -84,7 +84,7 @@ test_case_t test[] = { .loadkernel_return_val = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, .external_expected = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0,}, - .expected_recovery_request_val = VBNV_RECOVERY_NOT_REQUESTED, + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, .expected_to_find_disk = pickme, .expected_to_load_disk = pickme, .expected_return_val = VBERROR_SUCCESS @@ -102,7 +102,7 @@ test_case_t test[] = { .diskgetinfo_return_val = VBERROR_SUCCESS, .loadkernel_return_val = {1, 0, 1, 1, 1, 1, 1, 1, 1, 1,}, - .expected_recovery_request_val = VBNV_RECOVERY_NOT_REQUESTED, + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, .expected_to_find_disk = pickme, .expected_to_load_disk = pickme, .expected_return_val = VBERROR_SUCCESS @@ -132,7 +132,7 @@ test_case_t test[] = { .diskgetinfo_return_val = VBERROR_SUCCESS, .loadkernel_return_val = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, - .expected_recovery_request_val = VBNV_RECOVERY_NOT_REQUESTED, + .expected_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED, .expected_to_find_disk = pickme, .expected_to_load_disk = pickme, .expected_return_val = VBERROR_SUCCESS @@ -145,7 +145,7 @@ test_case_t test[] = { .diskgetinfo_return_val = VBERROR_SUCCESS, .loadkernel_return_val = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, - .expected_recovery_request_val = VBNV_RECOVERY_RW_NO_DISK, + .expected_recovery_request_val = VB2_RECOVERY_RW_NO_DISK, .expected_to_find_disk = 0, .expected_to_load_disk = 0, .expected_return_val = VBERROR_NO_DISK_FOUND @@ -173,7 +173,7 @@ test_case_t test[] = { .diskgetinfo_return_val = VBERROR_SUCCESS, .loadkernel_return_val = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, - .expected_recovery_request_val = VBNV_RECOVERY_RW_NO_KERNEL, + .expected_recovery_request_val = VB2_RECOVERY_RW_NO_KERNEL, .expected_to_find_disk = DONT_CARE, .expected_to_load_disk = 0, .expected_return_val = 1 @@ -205,7 +205,7 @@ static void ResetMocks(int i) memset(&mock_disks, 0, sizeof(mock_disks)); load_kernel_calls = 0; - got_recovery_request_val = VBNV_RECOVERY_NOT_REQUESTED; + got_recovery_request_val = VB2_RECOVERY_NOT_REQUESTED; got_find_disk = 0; got_load_disk = 0; got_return_val = 0xdeadbeef; diff --git a/tests/vboot_audio_tests.c b/tests/vboot_audio_tests.c index 99d9bd4f..94bbb0ac 100644 --- a/tests/vboot_audio_tests.c +++ b/tests/vboot_audio_tests.c @@ -20,7 +20,6 @@ #include "vboot_audio_private.h" #include "vboot_common.h" #include "vboot_display.h" -#include "vboot_nvstorage.h" #include "vboot_struct.h" diff --git a/tests/vboot_display_tests.c b/tests/vboot_display_tests.c index 33421b5b..a0f9eade 100644 --- a/tests/vboot_display_tests.c +++ b/tests/vboot_display_tests.c @@ -22,7 +22,6 @@ #include "vboot_common.h" #include "vboot_display.h" #include "vboot_kernel.h" -#include "vboot_nvstorage.h" /* Mock data */ static VbCommonParams cparams; diff --git a/tests/vboot_kernel_tests.c b/tests/vboot_kernel_tests.c index b1e1635e..d581b373 100644 --- a/tests/vboot_kernel_tests.c +++ b/tests/vboot_kernel_tests.c @@ -14,6 +14,7 @@ #include "2api.h" #include "2common.h" #include "2misc.h" +#include "2nvstorage.h" #include "2sha.h" #include "cgptlib.h" #include "cgptlib_internal.h" @@ -28,7 +29,6 @@ #include "vboot_api.h" #include "vboot_common.h" #include "vboot_kernel.h" -#include "vboot_nvstorage.h" #define LOGCALL(fmt, args...) sprintf(call_log + strlen(call_log), fmt, ##args) #define TEST_CALLS(expect_log) TEST_STR_EQ(call_log, expect_log, " calls") @@ -62,7 +62,6 @@ static int gpt_flag_external; static uint8_t gbb_data[sizeof(GoogleBinaryBlockHeader) + 2048]; static GoogleBinaryBlockHeader *gbb = (GoogleBinaryBlockHeader*)gbb_data; static VbExDiskHandle_t handle; -static VbNvContext vnc; static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE]; static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data; static LoadKernelParams lkp; @@ -152,12 +151,7 @@ static void ResetMocks(void) cparams.gbb_size = sizeof(gbb_data); cparams.shared_data_blob = shared; - memset(&vnc, 0, sizeof(vnc)); - VbNvSetup(&vnc); - VbNvTeardown(&vnc); /* So CRC gets generated */ - memset(&lkp, 0, sizeof(lkp)); - lkp.nv_context = &vnc; lkp.bytes_per_lba = 512; lkp.streaming_lba_count = 1024; lkp.gpt_lba_count = 1024; @@ -186,9 +180,10 @@ static void ResetMocks(void) mock_part_next = 0; memset(&ctx, 0, sizeof(ctx)); - memcpy(ctx.nvdata, vnc.raw, VB2_NVDATA_SIZE); ctx.workbuf = workbuf; ctx.workbuf_size = sizeof(workbuf); + vb2_nv_init(&ctx); + // TODO: more workbuf fields - flags, secdata, secdatak } @@ -574,15 +569,7 @@ static void ReadWriteGptTest(void) static void TestLoadKernel(int expect_retval, char *test_name) { - memcpy(ctx.nvdata, vnc.raw, VB2_NVDATA_SIZE); - TEST_EQ(LoadKernel(&ctx, &lkp, &cparams), expect_retval, test_name); - - if (ctx.flags & VB2_CONTEXT_NVDATA_CHANGED) { - memcpy(vnc.raw, ctx.nvdata, VB2_NVDATA_SIZE); - vnc.raw_changed = 1; - ctx.flags &= ~VB2_CONTEXT_NVDATA_CHANGED; - } } /** @@ -602,8 +589,6 @@ static void InvalidParamsTest(void) static void LoadKernelTest(void) { - uint32_t u; - ResetMocks(); TestLoadKernel(0, "First kernel good"); @@ -612,8 +597,8 @@ static void LoadKernelTest(void) TEST_EQ(lkp.bootloader_size, 0x1234, " bootloader size"); TEST_STR_EQ((char *)lkp.partition_guid, "FakeGuid", " guid"); TEST_EQ(gpt_flag_external, 0, "GPT was internal"); - VbNvGet(&vnc, VBNV_RECOVERY_REQUEST, &u); - TEST_EQ(u, 0, " recovery request"); + TEST_EQ(vb2_nv_get(&ctx, VB2_NV_RECOVERY_REQUEST), + 0, " recovery request"); ResetMocks(); mock_parts[1].start = 300; @@ -626,15 +611,15 @@ static void LoadKernelTest(void) ResetMocks(); mock_parts[0].size = 0; TestLoadKernel(VBERROR_NO_KERNEL_FOUND, "No kernels"); - VbNvGet(&vnc, VBNV_RECOVERY_REQUEST, &u); - TEST_EQ(u, VBNV_RECOVERY_RW_NO_OS, " recovery request"); + TEST_EQ(vb2_nv_get(&ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RW_NO_OS, " recovery request"); /* Skip kernels which are too small */ ResetMocks(); mock_parts[0].size = 10; TestLoadKernel(VBERROR_INVALID_KERNEL_FOUND, "Too small"); - VbNvGet(&vnc, VBNV_RECOVERY_REQUEST, &u); - TEST_EQ(u, VBNV_RECOVERY_RW_INVALID_OS, " recovery request"); + TEST_EQ(vb2_nv_get(&ctx, VB2_NV_RECOVERY_REQUEST), + VB2_RECOVERY_RW_INVALID_OS, " recovery request"); ResetMocks(); disk_read_to_fail = 100; @@ -660,8 +645,7 @@ static void LoadKernelTest(void) /* In dev mode and requiring signed kernel, fail if sig is bad */ ResetMocks(); ctx.flags |= VB2_CONTEXT_DEVELOPER_MODE; - VbNvSet(&vnc, VBNV_DEV_BOOT_SIGNED_ONLY, 1); - VbNvTeardown(&vnc); + vb2_nv_set(&ctx, VB2_NV_DEV_BOOT_SIGNED_ONLY, 1); key_block_verify_fail = 1; TestLoadKernel(VBERROR_INVALID_KERNEL_FOUND, "Fail key block dev sig"); diff --git a/tests/vboot_nvstorage_test.c b/tests/vboot_nvstorage_test.c deleted file mode 100644 index c461978f..00000000 --- a/tests/vboot_nvstorage_test.c +++ /dev/null @@ -1,208 +0,0 @@ -/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * Tests for firmware NV storage library. - */ - -#include <stdint.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "test_common.h" -#include "vboot_common.h" -#include "vboot_nvstorage.h" - -/* Single NV storage field to test */ -typedef struct VbNvField { - VbNvParam param; /* Parameter index */ - uint32_t default_value; /* Expected default value */ - uint32_t test_value; /* Value to test writing */ - uint32_t test_value2; /* Second value to test writing */ - char* desc; /* Field description */ -} VbNvField; - -/* Array of fields to test, terminated with a field with desc==NULL. */ -static VbNvField nvfields[] = { - {VBNV_DEBUG_RESET_MODE, 0, 1, 0, "debug reset mode"}, - {VBNV_TRY_B_COUNT, 0, 6, 15, "try B count"}, - {VBNV_RECOVERY_REQUEST, 0, 0x42, 0xED, "recovery request"}, - {VBNV_LOCALIZATION_INDEX, 0, 0x69, 0xB0, "localization index"}, - {VBNV_KERNEL_FIELD, 0, 0x1234, 0xFEDC, "kernel field"}, - {VBNV_DEV_BOOT_USB, 0, 1, 0, "dev boot usb"}, - {VBNV_DEV_BOOT_LEGACY, 0, 1, 0, "dev boot legacy"}, - {VBNV_DEV_BOOT_SIGNED_ONLY, 0, 1, 0, "dev boot custom"}, - {VBNV_DEV_BOOT_FASTBOOT_FULL_CAP, 0, 1, 0, "dev boot fastboot full cap"}, - {VBNV_DEV_DEFAULT_BOOT, 0, 1, 2, "dev default boot"}, - {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"}, - {VBNV_FW_TRIED, 0, 1, 0, "firmware tried"}, - {VBNV_FW_RESULT, VBNV_FW_RESULT_UNKNOWN, 1, 2, "firmware result"}, - {VBNV_FW_PREV_TRIED, 0, 1, 0, "firmware prev tried"}, - {VBNV_FW_PREV_RESULT, VBNV_FW_RESULT_UNKNOWN, 1, 3, "firmware prev result"}, - {VBNV_FASTBOOT_UNLOCK_IN_FW, 0, 1, 0, "fastboot unlock in firmware"}, - {VBNV_BOOT_ON_AC_DETECT, 0, 1, 0, "boot on ac detect"}, - {VBNV_TRY_RO_SYNC, 0, 1, 0, "try read only software sync"}, - {VBNV_KERNEL_MAX_ROLLFORWARD, 0, 0x12345678, 0xFEDCBA98, - "kernel max rollforward"}, - {0, 0, 0, 0, NULL} -}; - -static void VbNvStorageTest(void) { - - VbNvField* vnf; - VbNvContext c; - uint8_t goodcrc; - uint32_t data; - - memset(&c, 0xA6, sizeof(c)); - - /* Open with invalid data should set defaults */ - TEST_EQ(VbNvSetup(&c), 0, "VbNvSetup()"); - TEST_EQ(c.raw[0], 0x70, "VbNvSetup() reset header byte"); - /* Close then regenerates the CRC */ - TEST_EQ(VbNvTeardown(&c), 0, "VbNvTeardown()"); - TEST_NEQ(c.raw[15], 0, "VbNvTeardown() CRC"); - TEST_EQ(c.raw_changed, 1, "VbNvTeardown() changed"); - goodcrc = c.raw[15]; - /* Another open-close pair should not cause further changes */ - VbNvSetup(&c); - VbNvTeardown(&c); - TEST_EQ(c.raw_changed, 0, "VbNvTeardown() didn't change"); - TEST_EQ(c.raw[15], goodcrc, "VbNvTeardown() CRC same"); - - /* Perturbing the header should force defaults */ - c.raw[0] ^= 0x40; - VbNvSetup(&c); - TEST_EQ(c.raw[0], 0x70, "VbNvSetup() reset header byte again"); - /* Close then regenerates the CRC */ - VbNvTeardown(&c); - TEST_EQ(c.raw_changed, 1, "VbNvTeardown() changed again"); - TEST_EQ(c.raw[15], goodcrc, "VbNvTeardown() CRC same again"); - - /* So should perturbing some other byte */ - TEST_EQ(c.raw[11], 0, "Kernel byte starts at 0"); - c.raw[11] = 12; - VbNvSetup(&c); - TEST_EQ(c.raw[11], 0, "VbNvSetup() reset kernel byte"); - /* Close then regenerates the CRC */ - VbNvTeardown(&c); - TEST_EQ(c.raw_changed, 1, "VbNvTeardown() changed again"); - TEST_EQ(c.raw[15], goodcrc, "VbNvTeardown() CRC same again"); - - /* Clear the kernel and firmware flags */ - VbNvSetup(&c); - TEST_EQ(VbNvGet(&c, VBNV_FIRMWARE_SETTINGS_RESET, &data), 0, - "Get firmware settings reset"); - TEST_EQ(data, 1, "Firmware settings are reset"); - TEST_EQ(VbNvSet(&c, VBNV_FIRMWARE_SETTINGS_RESET, 0), 0, - "Clear firmware settings reset"); - VbNvGet(&c, VBNV_FIRMWARE_SETTINGS_RESET, &data); - TEST_EQ(data, 0, "Firmware settings are clear"); - - TEST_EQ(VbNvGet(&c, VBNV_KERNEL_SETTINGS_RESET, &data), 0, - "Get kernel settings reset"); - TEST_EQ(data, 1, "Kernel settings are reset"); - TEST_EQ(VbNvSet(&c, VBNV_KERNEL_SETTINGS_RESET, 0), 0, - "Clear kernel settings reset"); - VbNvGet(&c, VBNV_KERNEL_SETTINGS_RESET, &data); - TEST_EQ(data, 0, "Kernel settings are clear"); - TEST_EQ(c.raw[0], 0x40, "Header byte now just has the header bit"); - VbNvTeardown(&c); - /* That should have changed the CRC */ - TEST_NEQ(c.raw[15], goodcrc, "VbNvTeardown() CRC changed due to flags clear"); - - /* Test explicitly setting the reset flags again */ - VbNvSetup(&c); - VbNvSet(&c, VBNV_FIRMWARE_SETTINGS_RESET, 1); - VbNvGet(&c, VBNV_FIRMWARE_SETTINGS_RESET, &data); - TEST_EQ(data, 1, "Firmware settings forced reset"); - VbNvSet(&c, VBNV_FIRMWARE_SETTINGS_RESET, 0); - - VbNvSet(&c, VBNV_KERNEL_SETTINGS_RESET, 1); - VbNvGet(&c, VBNV_KERNEL_SETTINGS_RESET, &data); - TEST_EQ(data, 1, "Kernel settings forced reset"); - VbNvSet(&c, VBNV_KERNEL_SETTINGS_RESET, 0); - VbNvTeardown(&c); - - /* Get/set an invalid field */ - VbNvSetup(&c); - TEST_EQ(VbNvGet(&c, -1, &data), 1, "Get invalid setting"); - TEST_EQ(VbNvSet(&c, -1, 0), 1, "Set invalid setting"); - VbNvTeardown(&c); - - /* Test other fields */ - VbNvSetup(&c); - /* Test all defaults first, since some fields alias onto others */ - for (vnf = nvfields; vnf->desc; vnf++) { - printf("Testing field: %s\n", vnf->desc); - TEST_EQ(VbNvGet(&c, vnf->param, &data), 0, " get"); - TEST_EQ(data, vnf->default_value, " default"); - } - /* Now test get/set */ - for (vnf = nvfields; vnf->desc; vnf++) { - printf("Testing field: %s\n", vnf->desc); - TEST_EQ(VbNvSet(&c, vnf->param, vnf->test_value), 0, " set 1"); - TEST_EQ(VbNvGet(&c, vnf->param, &data), 0, " get 1"); - TEST_EQ(data, vnf->test_value, " value 1"); - - TEST_EQ(VbNvSet(&c, vnf->param, vnf->test_value2), 0, " set 2"); - TEST_EQ(VbNvGet(&c, vnf->param, &data), 0, " get 2"); - TEST_EQ(data, vnf->test_value2, " value 2"); - } - VbNvTeardown(&c); - - /* None of those changes should have caused a reset to defaults */ - VbNvSetup(&c); - VbNvGet(&c, VBNV_FIRMWARE_SETTINGS_RESET, &data); - TEST_EQ(data, 0, "Firmware settings are still clear"); - VbNvGet(&c, VBNV_KERNEL_SETTINGS_RESET, &data); - TEST_EQ(data, 0, "Kernel settings are still clear"); - VbNvTeardown(&c); - - /* Verify writing identical settings doesn't cause the CRC to regenerate */ - VbNvSetup(&c); - TEST_EQ(c.regenerate_crc, 0, "No regen CRC on open"); - for (vnf = nvfields; vnf->desc; vnf++) - TEST_EQ(VbNvSet(&c, vnf->param, vnf->test_value2), 0, vnf->desc); - TEST_EQ(c.regenerate_crc, 0, "No regen CRC if data not changed"); - VbNvTeardown(&c); - TEST_EQ(c.raw_changed, 0, "No raw change if data not changed"); - - /* Test out-of-range fields mapping to defaults */ - VbNvSetup(&c); - VbNvSet(&c, VBNV_TRY_B_COUNT, 16); - VbNvGet(&c, VBNV_TRY_B_COUNT, &data); - TEST_EQ(data, 15, "Try b count out of range"); - VbNvSetup(&c); - VbNvSet(&c, VBNV_FW_TRY_COUNT, 16); - VbNvGet(&c, VBNV_FW_TRY_COUNT, &data); - TEST_EQ(data, 15, "Try count out of range"); - VbNvSet(&c, VBNV_RECOVERY_REQUEST, 0x101); - VbNvGet(&c, VBNV_RECOVERY_REQUEST, &data); - TEST_EQ(data, VBNV_RECOVERY_LEGACY, "Recovery request out of range"); - VbNvSet(&c, VBNV_LOCALIZATION_INDEX, 0x102); - VbNvGet(&c, VBNV_LOCALIZATION_INDEX, &data); - TEST_EQ(data, 0, "Localization index out of range"); - VbNvSet(&c, VBNV_FW_RESULT, VBNV_FW_RESULT_UNKNOWN + 100); - VbNvGet(&c, VBNV_FW_RESULT, &data); - TEST_EQ(data, VBNV_FW_RESULT_UNKNOWN, "Firmware result out of range"); - VbNvSet(&c, VBNV_DEV_DEFAULT_BOOT, VBNV_DEV_DEFAULT_BOOT_DISK + 100); - VbNvGet(&c, VBNV_DEV_DEFAULT_BOOT, &data); - TEST_EQ(data, VBNV_DEV_DEFAULT_BOOT_DISK, "Firmware result out of range"); - VbNvTeardown(&c); -} - - -int main(int argc, char* argv[]) -{ - VbNvStorageTest(); - - return gTestSuccess ? 0 : 255; -} diff --git a/tests/vboot_region_tests.c b/tests/vboot_region_tests.c index 464461c7..a08daede 100644 --- a/tests/vboot_region_tests.c +++ b/tests/vboot_region_tests.c @@ -16,12 +16,12 @@ #include "rollback_index.h" #include "test_common.h" #include "vboot_common.h" -#include "vboot_nvstorage.h" #include "vboot_struct.h" +typedef struct VbNvContext VbNvContext; + /* Mock data */ static VbCommonParams cparams; -static VbNvContext vnc; static VbSelectFirmwareParams fparams; VbSelectAndLoadKernelParams kparams; static char gbb_data[4096 + sizeof(GoogleBinaryBlockHeader)]; @@ -45,10 +45,6 @@ static void ResetMocks(void) { ScreenLayout *layout; int gbb_used; - memset(&vnc, 0, sizeof(vnc)); - VbNvSetup(&vnc); - VbNvTeardown(&vnc); /* So CRC gets generated */ - memset(&cparams, 0, sizeof(cparams)); cparams.shared_data_size = sizeof(shared_data); cparams.shared_data_blob = shared_data; @@ -116,12 +112,10 @@ static void ResetMocks(void) { /* Mocked verification functions */ VbError_t VbExNvStorageRead(uint8_t* buf) { - memcpy(buf, vnc.raw, sizeof(vnc.raw)); return VBERROR_SUCCESS; } VbError_t VbExNvStorageWrite(const uint8_t* buf) { - memcpy(vnc.raw, buf, sizeof(vnc.raw)); return VBERROR_SUCCESS; } diff --git a/tests/verify_kernel.c b/tests/verify_kernel.c index 5c48781b..58c01ad9 100644 --- a/tests/verify_kernel.c +++ b/tests/verify_kernel.c @@ -12,6 +12,7 @@ #include "2sysincludes.h" #include "2api.h" #include "2misc.h" +#include "2nvstorage.h" #include "host_common.h" #include "util_misc.h" #include "vboot_common.h" @@ -22,7 +23,6 @@ static uint8_t *diskbuf; static uint8_t shared_data[VB_SHARED_DATA_MIN_SIZE]; static VbSharedDataHeader *shared = (VbSharedDataHeader *)shared_data; -static VbNvContext nvc; static LoadKernelParams params; static VbCommonParams cparams; @@ -111,20 +111,13 @@ int main(int argc, char *argv[]) params.boot_flags = 0; /* - * LoadKernel() cares only about VBNV_DEV_BOOT_SIGNED_ONLY, and only in - * dev mode. So just use defaults. - */ - VbNvSetup(&nvc); - params.nv_context = &nvc; - - /* * Set up vboot context. * * TODO: Propagate this up to higher API levels */ struct vb2_context ctx; memset(&ctx, 0, sizeof(ctx)); - /* No need to initialize ctx->nvdata[]; defaults are fine */ + /* TODO(chromium:441893): support dev-mode flag and external gpt flag */ ctx.workbuf = malloc(VB2_KERNEL_WORKBUF_RECOMMENDED_SIZE); if (!ctx.workbuf) { @@ -139,6 +132,12 @@ int main(int argc, char *argv[]) return 1; } + /* + * LoadKernel() cares only about VBNV_DEV_BOOT_SIGNED_ONLY, and only in + * dev mode. So just use defaults for nv storage. + */ + vb2_nv_init(&ctx); + /* Try loading kernel */ rv = LoadKernel(&ctx, ¶ms, &cparams); if (rv != VBERROR_SUCCESS) { @@ -151,7 +150,7 @@ int main(int argc, char *argv[]) printf("Bootloader address: 0x%" PRIx64 "\n", params.bootloader_address); - /* TODO: print other things (partition GUID, nv_context, shared_data) */ + /* TODO: print other things (partition GUID, shared_data) */ printf("Yaay!\n"); return 0; |