diff options
-rw-r--r-- | firmware/2lib/2misc.c | 14 | ||||
-rw-r--r-- | tests/vb2_misc_tests.c | 24 |
2 files changed, 37 insertions, 1 deletions
diff --git a/firmware/2lib/2misc.c b/firmware/2lib/2misc.c index baa50132..b5788e30 100644 --- a/firmware/2lib/2misc.c +++ b/firmware/2lib/2misc.c @@ -514,7 +514,19 @@ enum vb2_dev_default_boot vb2_get_dev_boot_target( if (gbb->flags & VB2_GBB_FLAG_DEFAULT_DEV_BOOT_LEGACY) return VB2_DEV_DEFAULT_BOOT_LEGACY; - return vb2_nv_get(ctx, VB2_NV_DEV_DEFAULT_BOOT); + switch (vb2_nv_get(ctx, VB2_NV_DEV_DEFAULT_BOOT)) { + case VB2_DEV_DEFAULT_BOOT_USB: + if (vb2_dev_boot_usb_allowed(ctx)) + return VB2_DEV_DEFAULT_BOOT_USB; + break; + + case VB2_DEV_DEFAULT_BOOT_LEGACY: + if (vb2_dev_boot_legacy_allowed(ctx)) + return VB2_DEV_DEFAULT_BOOT_LEGACY; + break; + } + + return VB2_DEV_DEFAULT_BOOT_DISK; } int vb2_dev_boot_allowed(struct vb2_context *ctx) diff --git a/tests/vb2_misc_tests.c b/tests/vb2_misc_tests.c index f5cc90c0..aabe0ee6 100644 --- a/tests/vb2_misc_tests.c +++ b/tests/vb2_misc_tests.c @@ -872,15 +872,39 @@ static void dev_default_boot_tests(void) /* Boot from usb */ reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_USB, 1); 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 from usb not allowed */ + 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_DISK, "default boot usb not allowed"); + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_LEGACY, 1); + 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_DISK, "default boot usb not allowed"); + /* Boot legacy */ reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_LEGACY, 1); 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"); + + /* Boot legacy not allowed */ + 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_DISK, "default boot legacy not allowed"); + reset_common_data(); + vb2_nv_set(ctx, VB2_NV_DEV_BOOT_USB, 1); + 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_DISK, "default boot legacy not allowed"); } static void dev_boot_allowed_tests(void) |