detachables: Print error if enable normal mode when FORCE_DEV on
Print a debug error and beep when user tries to enable normal mode
when FORCE_DEV gbb flag is enabled.
BUG=b:67828898
BRANCH=None
TEST=Boot up with gbb flag 0x8 enabled. Select "Enabled OS
Verification" and select confirm. Should see error message
printed and a beep. Confirm switching to normal mode
screen will not appear.
Change-Id: Ic02558eb4a86555cebc9c1cd6972d0f0600b4ff1
Signed-off-by: Shelley Chen <shchen@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/730415
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
diff --git a/firmware/lib/vboot_ui_menu.c b/firmware/lib/vboot_ui_menu.c
index e569292..7a00f3d 100644
--- a/firmware/lib/vboot_ui_menu.c
+++ b/firmware/lib/vboot_ui_menu.c
@@ -953,22 +953,37 @@
/* Enabling verified boot */
if (current_menu == VB_MENU_TO_NORM &&
current_menu_idx == VB_TO_NORM_CONFIRM) {
- /*
- * See if we should disable virtual dev-mode
- * switch.
- */
- VB2_DEBUG("%s shared->flags=0x%x\n",
- __func__, shared->flags);
- /* Ignore space in VbUserConfirmsMenu()... */
- VB2_DEBUG("leaving dev-mode.\n");
- vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST,
- 1);
- VbDisplayScreen(ctx,
+ if (gbb->flags & GBB_FLAG_FORCE_DEV_SWITCH_ON) {
+ /*
+ * Throw error when user tries to
+ * confirm transition to normal
+ * mode if FORCE_DEV_SWITCH_ON
+ * is enabled.
+ */
+ VB2_DEBUG("TONORM rejected by "
+ "FORCE_DEV_SWITCH_ON\n");
+ VbExDisplayDebugInfo(
+ "WARNING: TONORM prohibited by "
+ "GBB FORCE_DEV_SWITCH_ON.\n\n");
+ VbExBeep(120, 400);
+ } else {
+ /*
+ * See if we should disable
+ * virtual dev-mode switch.
+ */
+ VB2_DEBUG("%s shared->flags=0x%x\n",
+ __func__, shared->flags);
+ VB2_DEBUG("leaving dev-mode.\n");
+ vb2_nv_set(ctx,
+ VB2_NV_DISABLE_DEV_REQUEST,
+ 1);
+ VbDisplayScreen(ctx,
cparams,
VB_SCREEN_TO_NORM_CONFIRMED,
0);
- VbExSleepMs(5000);
- return VBERROR_REBOOT_REQUIRED;
+ VbExSleepMs(5000);
+ return VBERROR_REBOOT_REQUIRED;
+ }
}
/* reset 30 second timer */
audio = VbAudioOpen(cparams);