summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/2lib/2misc.c14
-rw-r--r--tests/vb2_misc_tests.c24
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)