diff options
Diffstat (limited to 'tests/vboot_api_kernel4_tests.c')
-rw-r--r-- | tests/vboot_api_kernel4_tests.c | 112 |
1 files changed, 50 insertions, 62 deletions
diff --git a/tests/vboot_api_kernel4_tests.c b/tests/vboot_api_kernel4_tests.c index d413024e..cbae595c 100644 --- a/tests/vboot_api_kernel4_tests.c +++ b/tests/vboot_api_kernel4_tests.c @@ -13,7 +13,6 @@ #include "2sysincludes.h" #include "host_common.h" #include "load_kernel_fw.h" -#include "secdata_tpm.h" #include "test_common.h" #include "tlcl.h" #include "tss_constants.h" @@ -34,17 +33,15 @@ static struct vb2_gbb_header gbb; static uint32_t kernel_version; static uint32_t new_version; -static uint8_t fwmp_buf[VB2_SECDATA_FWMP_MIN_SIZE]; -static uint32_t kernel_read_retval; -static uint32_t kernel_write_retval; -static uint32_t kernel_lock_retval; -static uint32_t fwmp_read_retval; static vb2_error_t vbboot_retval; +static vb2_error_t commit_data_retval; +static int commit_data_called; +static vb2_error_t secdata_kernel_init_retval; +static vb2_error_t secdata_fwmp_init_retval; static uint32_t mock_switches[8]; static uint32_t mock_switches_count; static int mock_switches_are_stuck; -static int commit_data_called; /* Reset mock data (for use before each test) */ static void ResetMocks(void) @@ -68,14 +65,11 @@ static void ResetMocks(void) memset(&shared_data, 0, sizeof(shared_data)); - memset(&fwmp_buf, 0, sizeof(fwmp_buf)); - fwmp_read_retval = TPM_SUCCESS; - kernel_version = new_version = 0x10002; - kernel_read_retval = TPM_SUCCESS; - kernel_write_retval = TPM_SUCCESS; - kernel_lock_retval = TPM_SUCCESS; + commit_data_retval = VB2_SUCCESS; vbboot_retval = VB2_SUCCESS; + secdata_kernel_init_retval = VB2_SUCCESS; + secdata_fwmp_init_retval = VB2_SUCCESS; memset(mock_switches, 0, sizeof(mock_switches)); mock_switches_count = 0; @@ -87,43 +81,12 @@ static void ResetMocks(void) vb2_error_t vb2ex_commit_data(struct vb2_context *c) { commit_data_called = 1; - return VB2_SUCCESS; -} - -uint32_t secdata_firmware_write(struct vb2_context *c) -{ - return TPM_SUCCESS; -} - -uint32_t secdata_kernel_read(struct vb2_context *c) -{ - return kernel_read_retval; -} - -uint32_t secdata_kernel_write(struct vb2_context *c) -{ - return kernel_write_retval; -} - -uint32_t secdata_kernel_lock(struct vb2_context *c) -{ - return kernel_lock_retval; -} - -uint32_t secdata_fwmp_read(struct vb2_context *c) -{ - memcpy(&c->secdata_fwmp, &fwmp_buf, sizeof(fwmp_buf)); - return fwmp_read_retval; -} - -vb2_error_t vb2_secdata_firmware_init(struct vb2_context *c) -{ - return VB2_SUCCESS; + return commit_data_retval; } vb2_error_t vb2_secdata_kernel_init(struct vb2_context *c) { - return VB2_SUCCESS; + return secdata_kernel_init_retval; } uint32_t vb2_secdata_kernel_get(struct vb2_context *c, @@ -132,6 +95,11 @@ uint32_t vb2_secdata_kernel_get(struct vb2_context *c, return kernel_version; } +vb2_error_t vb2_secdata_fwmp_init(struct vb2_context *c) +{ + return secdata_fwmp_init_retval; +} + void vb2_secdata_kernel_set(struct vb2_context *c, enum vb2_secdata_kernel_param param, uint32_t value) @@ -222,12 +190,6 @@ static void VbSlkTest(void) gbb.flags |= VB2_GBB_FLAG_DISABLE_EC_SOFTWARE_SYNC; test_slk(0, 0, "EC sync disabled by GBB"); - /* Rollback kernel version */ - ResetMocks(); - kernel_read_retval = 123; - test_slk(VB2_ERROR_SECDATA_KERNEL_READ, - VB2_RECOVERY_RW_TPM_R_ERROR, "Read kernel rollback"); - ResetMocks(); new_version = 0x20003; test_slk(0, 0, "Roll forward"); @@ -254,15 +216,10 @@ static void VbSlkTest(void) ResetMocks(); new_version = 0x20003; - kernel_write_retval = 123; + commit_data_retval = VB2_ERROR_SECDATA_KERNEL_WRITE; test_slk(VB2_ERROR_SECDATA_KERNEL_WRITE, VB2_RECOVERY_RW_TPM_W_ERROR, "Write kernel rollback"); - ResetMocks(); - kernel_lock_retval = 123; - test_slk(VB2_ERROR_SECDATA_KERNEL_LOCK, - VB2_RECOVERY_RW_TPM_L_ERROR, "Lock kernel rollback"); - /* Boot normal */ ResetMocks(); vbboot_retval = -1; @@ -282,6 +239,32 @@ static void VbSlkTest(void) " didn't commit nvdata"); } + /* Boot normal - secdata init failures */ + ResetMocks(); + secdata_kernel_init_retval = VB2_ERROR_UNKNOWN; + test_slk(secdata_kernel_init_retval, VB2_RECOVERY_SECDATA_KERNEL_INIT, + "Normal secdata_kernel init error triggers recovery"); + + ResetMocks(); + secdata_fwmp_init_retval = VB2_ERROR_UNKNOWN; + test_slk(secdata_fwmp_init_retval, VB2_RECOVERY_SECDATA_FWMP_INIT, + "Normal secdata_fwmp init error triggers recovery"); + + /* Boot normal - commit data failures */ + ResetMocks(); + commit_data_retval = VB2_ERROR_SECDATA_FIRMWARE_WRITE; + test_slk(commit_data_retval, VB2_RECOVERY_RW_TPM_W_ERROR, + "Normal secdata_firmware write error triggers recovery"); + commit_data_retval = VB2_ERROR_SECDATA_KERNEL_WRITE; + test_slk(commit_data_retval, VB2_RECOVERY_RW_TPM_W_ERROR, + "Normal secdata_kernel write error triggers recovery"); + commit_data_retval = VB2_ERROR_NV_WRITE; + TEST_ABORT(VbSelectAndLoadKernel(ctx, shared, &kparams), + "Normal nvdata write error aborts"); + commit_data_retval = VB2_ERROR_UNKNOWN; + TEST_ABORT(VbSelectAndLoadKernel(ctx, shared, &kparams), + "Normal unknown commit error aborts"); + /* Boot dev */ ResetMocks(); sd->flags |= VB2_SD_FLAG_DEV_MODE_ENABLED; @@ -306,12 +289,17 @@ static void VbSlkTest(void) test_slk(0, 0, "Recovery doesn't roll forward"); TEST_EQ(kernel_version, 0x10002, " version"); + /* Boot recovery - commit data failures */ ResetMocks(); sd->recovery_reason = 123; - kernel_read_retval = TPM_E_IOERROR; - kernel_write_retval = TPM_E_IOERROR; - kernel_lock_retval = TPM_E_IOERROR; - test_slk(0, 0, "Recovery ignore TPM errors"); + commit_data_retval = VB2_ERROR_SECDATA_FIRMWARE_WRITE; + test_slk(0, 0, "Recovery ignore secdata_firmware write error"); + commit_data_retval = VB2_ERROR_SECDATA_KERNEL_WRITE; + test_slk(0, 0, "Recovery ignore secdata_kernel write error"); + commit_data_retval = VB2_ERROR_NV_WRITE; + test_slk(0, 0, "Recovery return nvdata write error"); + commit_data_retval = VB2_ERROR_UNKNOWN; + test_slk(0, 0, "Recovery return unknown write error"); ResetMocks(); sd->recovery_reason = VB2_RECOVERY_TRAIN_AND_REBOOT; |