summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Kitching <kitching@google.com>2020-05-14 14:21:49 +0800
committerCommit Bot <commit-bot@chromium.org>2020-05-18 16:13:17 +0000
commitb1e232b7851d2d3531779789c2c3755d7972807f (patch)
tree814b2e5a77e69e364ad90f0b99ccbe41dd0dfcb0
parent891fc6e942e5aa035e6fec4103880af91cff24c6 (diff)
downloadvboot-b1e232b7851d2d3531779789c2c3755d7972807f.tar.gz
vboot/ui: hide phone recovery flow when disabled
If phone recovery flow is disabled according to vb2api_phone_recovery_enabled(), then hide the "Recovery using phone" menu item from the RECOVERY_SELECT screen. BUG=b:146399181, b:147744345 TEST=make clean && make runtests TEST=Upgrade secdata_kernel to v1, boot to recovery mode, check menu BRANCH=none Change-Id: Id2d23b5a1cc31dec12befa60a9a52790b129495c Signed-off-by: Joel Kitching <kitching@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2201056 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>
-rw-r--r--firmware/2lib/2ui_screens.c19
-rw-r--r--firmware/2lib/include/2ui_private.h1
-rw-r--r--tests/vb2_ui_tests.c2
3 files changed, 20 insertions, 2 deletions
diff --git a/firmware/2lib/2ui_screens.c b/firmware/2lib/2ui_screens.c
index 356b3bfb..c4465a4a 100644
--- a/firmware/2lib/2ui_screens.c
+++ b/firmware/2lib/2ui_screens.c
@@ -81,12 +81,26 @@ static const struct vb2_screen_info advanced_options_screen = {
/******************************************************************************/
/* VB2_SCREEN_RECOVERY_SELECT */
+#define RECOVERY_SELECT_ITEM_PHONE 0
+#define RECOVERY_SELECT_ITEM_EXTERNAL_DISK 1
+
+vb2_error_t recovery_select_init(struct vb2_ui_context *ui)
+{
+ if (!vb2api_phone_recovery_enabled(ui->ctx)) {
+ VB2_DEBUG("WARNING: Phone recovery not available\n");
+ ui->state.disabled_item_mask |=
+ 1 << RECOVERY_SELECT_ITEM_PHONE;
+ ui->state.selected_item = RECOVERY_SELECT_ITEM_EXTERNAL_DISK;
+ }
+ return VB2_REQUEST_UI_CONTINUE;
+}
+
static const struct vb2_menu_item recovery_select_items[] = {
- {
+ [RECOVERY_SELECT_ITEM_PHONE] = {
.text = "Recovery using phone",
.target = VB2_SCREEN_RECOVERY_PHONE_STEP1,
},
- {
+ [RECOVERY_SELECT_ITEM_EXTERNAL_DISK] = {
.text = "Recovery using external disk",
.target = VB2_SCREEN_RECOVERY_DISK_STEP1,
},
@@ -96,6 +110,7 @@ static const struct vb2_menu_item recovery_select_items[] = {
static const struct vb2_screen_info recovery_select_screen = {
.id = VB2_SCREEN_RECOVERY_SELECT,
.name = "Recovery method selection",
+ .init = recovery_select_init,
MENU_ITEMS(recovery_select_items),
};
diff --git a/firmware/2lib/include/2ui_private.h b/firmware/2lib/include/2ui_private.h
index bfc0dd0b..2496555b 100644
--- a/firmware/2lib/include/2ui_private.h
+++ b/firmware/2lib/include/2ui_private.h
@@ -38,6 +38,7 @@ vb2_error_t try_recovery_action(struct vb2_ui_context *ui);
/* From 2ui_screens.c */
vb2_error_t advanced_options_init(struct vb2_ui_context *ui);
+vb2_error_t recovery_select_init(struct vb2_ui_context *ui);
vb2_error_t recovery_to_dev_init(struct vb2_ui_context *ui);
vb2_error_t developer_mode_init(struct vb2_ui_context *ui);
vb2_error_t developer_mode_action(struct vb2_ui_context *ui);
diff --git a/tests/vb2_ui_tests.c b/tests/vb2_ui_tests.c
index 1bd9e8b9..a45fba85 100644
--- a/tests/vb2_ui_tests.c
+++ b/tests/vb2_ui_tests.c
@@ -9,6 +9,7 @@
#include "2common.h"
#include "2misc.h"
#include "2nvstorage.h"
+#include "2struct.h"
#include "2ui.h"
#include "2ui_private.h"
#include "test_common.h"
@@ -161,6 +162,7 @@ static void reset_common_data(enum reset_type t)
ctx->flags |= VB2_CONTEXT_DEVELOPER_MODE;
sd = vb2_get_sd(ctx);
+ sd->status |= VB2_SD_STATUS_SECDATA_KERNEL_INIT;
/* For try_recovery_action */
invalid_disk_last = -1;