summaryrefslogtreecommitdiff
path: root/tests/vb2_misc_tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/vb2_misc_tests.c')
-rw-r--r--tests/vb2_misc_tests.c119
1 files changed, 119 insertions, 0 deletions
diff --git a/tests/vb2_misc_tests.c b/tests/vb2_misc_tests.c
index 89f534d7..1d8b42ed 100644
--- a/tests/vb2_misc_tests.c
+++ b/tests/vb2_misc_tests.c
@@ -21,6 +21,7 @@ static uint8_t workbuf2[VB2_FIRMWARE_WORKBUF_RECOMMENDED_SIZE]
static struct vb2_context *ctx;
static struct vb2_shared_data *sd;
static struct vb2_gbb_header gbb;
+static struct vb2_secdata_fwmp *fwmp;
/* Mocked function data */
static enum vb2_resource_index mock_resource_index;
@@ -39,6 +40,7 @@ static void reset_common_data(void)
"vb2api_init failed");
sd = vb2_get_sd(ctx);
+ sd->status = VB2_SD_STATUS_SECDATA_FWMP_INIT;
memset(&gbb, 0, sizeof(gbb));
@@ -47,6 +49,8 @@ static void reset_common_data(void)
vb2api_secdata_firmware_create(ctx);
vb2_secdata_firmware_init(ctx);
+ fwmp = (struct vb2_secdata_fwmp *)&ctx->secdata_fwmp;
+
mock_tpm_clear_called = 0;
mock_tpm_clear_retval = VB2_SUCCESS;
allow_recovery_retval = 0;
@@ -792,6 +796,119 @@ static void get_recovery_reason_tests(void)
TEST_EQ(vb2api_get_recovery_reason(ctx), 4, "correct recovery reason");
}
+static void dev_default_boot_tests(void)
+{
+ /* No default boot */
+ reset_common_data();
+ TEST_EQ(vb2_get_dev_boot_target(ctx), VB2_DEV_DEFAULT_BOOT_DISK,
+ "no default boot, boot disk");
+
+ /* Set boot legacy by GBB */
+ reset_common_data();
+ gbb.flags |= VB2_GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY;
+ vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, VB2_DEV_DEFAULT_BOOT_USB);
+ TEST_EQ(vb2_get_dev_boot_target(ctx), VB2_DEV_DEFAULT_BOOT_LEGACY,
+ "GBB set default boot legacy");
+
+ /* Boot from disk */
+ reset_common_data();
+ vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, VB2_DEV_DEFAULT_BOOT_DISK);
+ TEST_EQ(vb2_get_dev_boot_target(ctx), VB2_DEV_DEFAULT_BOOT_DISK,
+ "set default boot disk");
+
+ /* Boot from usb */
+ reset_common_data();
+ vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, VB2_DEV_DEFAULT_BOOT_USB);
+ TEST_EQ(vb2_get_dev_boot_target(ctx),
+ VB2_DEV_DEFAULT_BOOT_USB, "set default boot usb");
+
+ /* Boot legacy */
+ reset_common_data();
+ vb2_nv_set(ctx, VB2_NV_DEV_DEFAULT_BOOT, VB2_DEV_DEFAULT_BOOT_LEGACY);
+ TEST_EQ(vb2_get_dev_boot_target(ctx),
+ VB2_DEV_DEFAULT_BOOT_LEGACY, "set default boot legacy");
+}
+
+static void dev_boot_allowed_tests(void)
+{
+ /* Dev boot - allowed by default */
+ reset_common_data();
+ TEST_EQ(vb2_dev_boot_allowed(ctx), 1, "dev boot - allowed by default");
+
+ /* Dev boot - disabled by FWMP */
+ reset_common_data();
+ fwmp->flags |= VB2_SECDATA_FWMP_DEV_DISABLE_BOOT;
+ TEST_EQ(vb2_dev_boot_allowed(ctx), 0, "dev boot - FWMP disabled");
+
+ /* Dev boot - force enabled by GBB */
+ reset_common_data();
+ fwmp->flags |= VB2_SECDATA_FWMP_DEV_DISABLE_BOOT;
+ gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_SWITCH_ON;
+ TEST_EQ(vb2_dev_boot_allowed(ctx), 1, "dev boot - GBB force dev on");
+
+ /* Legacy boot - not allowed by default */
+ reset_common_data();
+ TEST_EQ(vb2_dev_boot_legacy_allowed(ctx), 0,
+ "dev boot legacy - not allowed by default");
+
+ /* Legacy boot - enabled by nvdata */
+ reset_common_data();
+ vb2_nv_set(ctx, VB2_NV_DEV_BOOT_LEGACY, 1);
+ TEST_EQ(vb2_dev_boot_legacy_allowed(ctx), 1,
+ "dev boot legacy - nvdata enabled");
+
+ /* Legacy boot - enabled by FWMP */
+ reset_common_data();
+ fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_LEGACY;
+ TEST_EQ(vb2_dev_boot_legacy_allowed(ctx), 1,
+ "dev boot legacy - secdata enabled");
+
+ /* Legacy boot - force enabled by GBB */
+ reset_common_data();
+ gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_BOOT_LEGACY;
+ TEST_EQ(vb2_dev_boot_legacy_allowed(ctx), 1,
+ "dev boot legacy - GBB force enabled");
+
+ /* Legacy boot - set all flags */
+ reset_common_data();
+ vb2_nv_set(ctx, VB2_NV_DEV_BOOT_LEGACY, 1);
+ fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_LEGACY;
+ gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_BOOT_LEGACY;
+ TEST_EQ(vb2_dev_boot_legacy_allowed(ctx), 1,
+ "dev boot legacy - all flags set");
+
+ /* USB boot - not allowed by default */
+ reset_common_data();
+ TEST_EQ(vb2_dev_boot_usb_allowed(ctx), 0,
+ "dev boot usb - not allowed by default");
+
+ /* USB boot - enabled by nvdata */
+ reset_common_data();
+ vb2_nv_set(ctx, VB2_NV_DEV_BOOT_USB, 1);
+ TEST_EQ(vb2_dev_boot_usb_allowed(ctx), 1, "dev boot usb -"
+ " nvdata enabled");
+
+ /* USB boot - enabled by FWMP */
+ reset_common_data();
+ fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_USB;
+ TEST_EQ(vb2_dev_boot_usb_allowed(ctx), 1,
+ "dev boot usb - secdata enabled");
+
+ /* USB boot - force enabled by GBB */
+ reset_common_data();
+ gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_BOOT_USB;
+ TEST_EQ(vb2_dev_boot_usb_allowed(ctx), 1,
+ "dev boot usb - GBB force enabled");
+
+ /* USB boot - set all flags */
+ reset_common_data();
+ vb2_nv_set(ctx, VB2_NV_DEV_BOOT_USB, 1);
+ fwmp->flags |= VB2_SECDATA_FWMP_DEV_ENABLE_USB;
+ gbb.flags |= VB2_GBB_FLAG_FORCE_DEV_BOOT_USB;
+ TEST_EQ(vb2_dev_boot_usb_allowed(ctx), 1,
+ "dev boot usb - all flags set");
+}
+
int main(int argc, char* argv[])
{
init_workbuf_tests();
@@ -805,6 +922,8 @@ int main(int argc, char* argv[])
need_reboot_for_display_tests();
clear_recovery_tests();
get_recovery_reason_tests();
+ dev_default_boot_tests();
+ dev_boot_allowed_tests();
return gTestSuccess ? 0 : 255;
}