vboot: make dev boot target functions consistent

vb2_get_dev_boot_target() should only return:

  BOOT_USB iff vb2_dev_boot_usb_allowed()
  BOOT_LEGACY iff vb2_dev_boot_legacy_allowed()

Otherwise, fallback to BOOT_DISK.

BUG=None
TEST=make clean && make runtests
BRANCH=none

Change-Id: Ic67915d0888f640f6e7b04c91f99346412cc18ee
Signed-off-by: Joel Kitching <kitching@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2203301
Reviewed-by: Joel Kitching <kitching@chromium.org>
Reviewed-by: Yu-Ping Wu <yupingso@chromium.org>
Tested-by: Joel Kitching <kitching@chromium.org>
Commit-Queue: Joel Kitching <kitching@chromium.org>
diff --git a/firmware/2lib/2misc.c b/firmware/2lib/2misc.c
index baa5013..b5788e3 100644
--- a/firmware/2lib/2misc.c
+++ b/firmware/2lib/2misc.c
@@ -514,7 +514,19 @@
 	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 f5cc90c..aabe0ee 100644
--- a/tests/vb2_misc_tests.c
+++ b/tests/vb2_misc_tests.c
@@ -872,15 +872,39 @@
 
 	/* 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)