summaryrefslogtreecommitdiff
path: root/tests/vboot_api_kernel4_tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vboot_api_kernel4_tests.c')
-rw-r--r--tests/vboot_api_kernel4_tests.c112
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;