diff options
Diffstat (limited to 'tests/vb2_misc_tests.c')
-rw-r--r-- | tests/vb2_misc_tests.c | 119 |
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; } |