diff options
-rw-r--r-- | firmware/include/vboot_api.h | 17 | ||||
-rw-r--r-- | firmware/lib/vboot_ui.c | 42 | ||||
-rw-r--r-- | firmware/lib/vboot_ui_wilco.c | 170 | ||||
-rw-r--r-- | tests/vboot_api_kernel2_tests.c | 135 |
4 files changed, 238 insertions, 126 deletions
diff --git a/firmware/include/vboot_api.h b/firmware/include/vboot_api.h index d7c2eee2..7fc79396 100644 --- a/firmware/include/vboot_api.h +++ b/firmware/include/vboot_api.h @@ -402,12 +402,6 @@ enum VbScreenType_t { VB_SCREEN_ALT_FW_PICK = 0x212, /* Alt firmware menu screen (for detachable UI ) */ VB_SCREEN_ALT_FW_MENU = 0x213, - /* Set vendor data menu screen */ - VB_SCREEN_SET_VENDOR_DATA = 0x214, - /* Confirm vendor data menu screen */ - VB_SCREEN_CONFIRM_VENDOR_DATA = 0x215, - /* Confirm reboot for running diagnostics rom */ - VB_SCREEN_CONFIRM_DIAG = 0x216, /* Confirm after VB_SCREEN_RECOVERY_TO_DEV_MENU */ VB_SCREEN_TO_DEV_CONFIRMED = 0x217, /* Hardware failure */ @@ -430,6 +424,15 @@ enum VbScreenType_t { VB_SCREEN_DEBUG_INFO = 0x252, /* BIOS log screen */ VB_SCREEN_BIOS_LOG = 0x253, + /* 0x300-0x350 reserved for device-specific screens */ + /* Vendor data not set warning screen */ + VB_COMPLETE_VENDOR_DATA = 0x300, + /* Set vendor data menu screen */ + VB_SCREEN_SET_VENDOR_DATA = 0x301, + /* Confirm vendor data menu screen */ + VB_SCREEN_CONFIRM_VENDOR_DATA = 0x302, + /* Confirm reboot for running diagnostics rom */ + VB_SCREEN_CONFIRM_DIAG = 0x303, }; /** @@ -439,6 +442,8 @@ typedef struct VbVendorData { /* Current state of the the vendor data input */ const char *input_text; + /* Current confirmation selection for new vendor data */ + uint32_t selected_index; } VbVendorData; /** diff --git a/firmware/lib/vboot_ui.c b/firmware/lib/vboot_ui.c index b46e59b4..1d8e5e5d 100644 --- a/firmware/lib/vboot_ui.c +++ b/firmware/lib/vboot_ui.c @@ -251,8 +251,17 @@ static vb2_error_t vb2_developer_ui(struct vb2_context *ctx) } } - /* Show the dev mode warning screen */ - VbDisplayScreen(ctx, VB_SCREEN_DEVELOPER_WARNING, 0, NULL); + if ((ctx->flags & VB2_CONTEXT_VENDOR_DATA_SETTABLE) && + VENDOR_DATA_LENGTH > 0) { + vb2_error_t ret; + VB2_DEBUG("VbBootDeveloper() - Vendor data not set\n"); + ret = vb2_vendor_data_ui(ctx); + if (ret) + return ret; + } + + /* Show the dev mode warning screen */ + VbDisplayScreen(ctx, VB_SCREEN_DEVELOPER_WARNING, 0, NULL); /* Initialize audio/delay context */ vb2_audio_start(ctx); @@ -335,35 +344,6 @@ static vb2_error_t vb2_developer_ui(struct vb2_context *ctx) vb2_error_no_altfw(); } break; - case VB_KEY_CTRL('S'): - if (VENDOR_DATA_LENGTH == 0) - break; - /* - * Only show the vendor data ui if it is tag is settable - */ - if (ctx->flags & VB2_CONTEXT_VENDOR_DATA_SETTABLE) { - vb2_error_t ret; - - VB2_DEBUG("VbBootDeveloper() - user pressed " - "Ctrl+S; Try set vendor data\n"); - - ret = vb2_vendor_data_ui(ctx); - if (ret) { - return ret; - } else { - /* Show dev mode warning screen again */ - VbDisplayScreen(ctx, - VB_SCREEN_DEVELOPER_WARNING, - 0, NULL); - } - } else { - vb2_error_notify( - "WARNING: Vendor data cannot be " - "changed because it is already set.\n", - NULL, - VB_BEEP_NOT_ALLOWED); - } - break; case VB_KEY_CTRL_ENTER: /* * The Ctrl-Enter is special for Lumpy test purpose; diff --git a/firmware/lib/vboot_ui_wilco.c b/firmware/lib/vboot_ui_wilco.c index b8457def..ff4e229e 100644 --- a/firmware/lib/vboot_ui_wilco.c +++ b/firmware/lib/vboot_ui_wilco.c @@ -20,18 +20,25 @@ static inline int is_vowel(uint32_t key) key == 'O' || key == 'U'; } +static int vendor_data_length(char *data_value) +{ + for (int len = 0; len <= VENDOR_DATA_LENGTH; len++) { + if (data_value[len] == '\0') + return len; + } + + return VENDOR_DATA_LENGTH; +} + /* - * Prompt the user to enter the vendor data + * Prompt the user to enter the serial number */ static vb2_error_t vb2_enter_vendor_data_ui(struct vb2_context *ctx, char *data_value) { - int len = 0; - VbScreenData data = { - .vendor_data = { data_value } - }; + int len = vendor_data_length(data_value); + VbScreenData data = {.vendor_data = {data_value, 1}}; - data_value[0] = '\0'; VbDisplayScreen(ctx, VB_SCREEN_SET_VENDOR_DATA, 1, &data); /* We'll loop until the user decides what to do */ @@ -101,70 +108,143 @@ static vb2_error_t vb2_enter_vendor_data_ui(struct vb2_context *ctx, return VB2_SUCCESS; } -vb2_error_t vb2_vendor_data_ui(struct vb2_context *ctx) +/* + * Prompt the user to confirm the serial number and write to memory + */ +static vb2_error_t vb2_confirm_vendor_data_ui(struct vb2_context *ctx, + char* data_value, VbScreenData *data) { - char data_value[VENDOR_DATA_LENGTH + 1]; - VbScreenData data = { - .vendor_data = { data_value } - }; - - vb2_error_t ret = vb2_enter_vendor_data_ui(ctx, data_value); - - if (ret) - return ret; - - /* Vendor data was not entered just return */ - if (data_value[0] == '\0') - return VB2_SUCCESS; - - VbDisplayScreen(ctx, VB_SCREEN_CONFIRM_VENDOR_DATA, 1, &data); + VbDisplayScreen(ctx, VB_SCREEN_CONFIRM_VENDOR_DATA, 1, data); /* We'll loop until the user decides what to do */ do { - uint32_t key = VbExKeyboardRead(); + uint32_t key_confirm = VbExKeyboardRead(); - if (vb2_want_shutdown(ctx, key)) { - VB2_DEBUG("Vendor Data UI - shutdown requested!\n"); + if (vb2_want_shutdown(ctx, key_confirm)) { + VB2_DEBUG("Confirm Vendor Data UI " + "- shutdown requested!\n"); return VBERROR_SHUTDOWN_REQUESTED; } - switch (key) { + switch (key_confirm) { case 0: /* Nothing pressed */ break; case VB_KEY_ESC: /* Escape pressed - return to developer screen */ - VB2_DEBUG("Vendor Data UI - user pressed Esc: " - "exit to Developer screen\n"); + VB2_DEBUG("Confirm Vendor Data UI - user " + "pressed Esc: exit to Developer screen\n"); return VB2_SUCCESS; + case VB_KEY_RIGHT: + case VB_KEY_LEFT: + data->vendor_data.selected_index = + data->vendor_data.selected_index ^ 1; + VbDisplayScreen(ctx, VB_SCREEN_CONFIRM_VENDOR_DATA, + 1, data); + VB2_DEBUG("selected_index:%d\n", + data->vendor_data.selected_index); + break; case VB_KEY_ENTER: /* Enter pressed - write vendor data */ - VB2_DEBUG("Vendor Data UI - user pressed Enter: " - "write vendor data (%s) to VPD\n", - data_value); - ret = VbExSetVendorData(data_value); + if (data->vendor_data.selected_index == 0) { + VB2_DEBUG("Confirm Vendor Data UI - user " + "selected YES: " + "write vendor data (%s) to VPD\n", + data_value); + vb2_error_t ret = VbExSetVendorData(data_value); - if (ret == VB2_SUCCESS) { - vb2_nv_set(ctx, VB2_NV_DISABLE_DEV_REQUEST, 1); - return VBERROR_REBOOT_REQUIRED; + if (ret == VB2_SUCCESS) { + vb2_nv_set(ctx, + VB2_NV_DISABLE_DEV_REQUEST, + 1); + return VBERROR_REBOOT_REQUIRED; + } else { + vb2_error_notify( + "ERROR: Vendor data was not " + "set.\n" + "System will now shutdown\n", + NULL, VB_BEEP_FAILED); + VbExSleepMs(5000); + return VBERROR_SHUTDOWN_REQUESTED; + } } else { - vb2_error_notify( - "ERROR: Vendor data was not set.\n" - "System will now shutdown\n", - NULL, - VB_BEEP_FAILED); - VbExSleepMs(5000); - return VBERROR_SHUTDOWN_REQUESTED; + VB2_DEBUG("Confirm Vendor Data UI - user " + "selected NO: " + "Returning to set screen\n"); + return VB2_SUCCESS; } default: - VB2_DEBUG("Vendor Data UI - pressed key %#x\n", key); - VbCheckDisplayKey(ctx, key, &data); + VB2_DEBUG("Confirm Vendor Data UI - pressed " + "key %#x\n", key_confirm); + VbCheckDisplayKey(ctx, key_confirm, data); break; } VbExSleepMs(KEY_DELAY_MS); } while (1); - return VB2_SUCCESS; } +vb2_error_t vb2_vendor_data_ui(struct vb2_context *ctx) +{ + char data_value[VENDOR_DATA_LENGTH + 1]; + + VbScreenData data = {.vendor_data = {data_value, 0}}; + VbDisplayScreen(ctx, VB_COMPLETE_VENDOR_DATA, 0, NULL); + + do { + uint32_t key_set = VbExKeyboardRead(); + + if (vb2_want_shutdown(ctx, key_set)) { + VB2_DEBUG("Vendor Data UI - shutdown requested!\n"); + return VBERROR_SHUTDOWN_REQUESTED; + } + + switch (key_set) { + case 0: + /* Nothing pressed - do nothing. */ + break; + case VB_KEY_ESC: + /* ESC pressed - boot normally */ + VB2_DEBUG("Vendor Data UI - boot normally\n"); + return VB2_SUCCESS; + break; + case VB_KEY_ENTER: + data_value[0] = '\0'; + do { + /* ENTER pressed - + enter vendor data set screen */ + VB2_DEBUG("Vendor Data UI - Enter VD set " + "screen\n"); + vb2_error_t ret = vb2_enter_vendor_data_ui( + ctx, data_value); + + if (ret) + return ret; + + /* Vendor data was not entered just return */ + if (vendor_data_length(data_value) == 0) { + return VB2_SUCCESS; + } + + /* Reset confirmation answer to YES */ + data.vendor_data.selected_index = 0; + + ret = vb2_confirm_vendor_data_ui( + ctx, data_value, &data); + + if (ret) + return ret; + + /* Break if vendor data confirmed */ + if (data.vendor_data.selected_index == 0) + return VB2_SUCCESS; + } while (1); + break; + default: + break; + } + } while (1); + return VB2_SUCCESS; +} + vb2_error_t vb2_check_diagnostic_key(struct vb2_context *ctx, uint32_t key) { if (DIAGNOSTIC_UI && (key == VB_KEY_CTRL('C') || key == VB_KEY_F(12))) { diff --git a/tests/vboot_api_kernel2_tests.c b/tests/vboot_api_kernel2_tests.c index c0d621d2..d9cbea58 100644 --- a/tests/vboot_api_kernel2_tests.c +++ b/tests/vboot_api_kernel2_tests.c @@ -891,56 +891,93 @@ static void VbBootDevTest(void) static void VbBootDevVendorDataTest(void) { - /* Ctrl+S set vendor data and reboot */ + /* Enter set vendor data and reboot */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = '4'; mock_keypress[2] = '3'; mock_keypress[3] = '2'; mock_keypress[4] = '1'; mock_keypress[5] = VB_KEY_ENTER; /* Set vendor data */ - mock_keypress[6] = VB_KEY_ENTER; /* Confirm vendor data */ + mock_keypress[6] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, - "Ctrl+S set vendor data and reboot"); + "Enter set vendor data, don't confirm, esc"); TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); TEST_STR_EQ(set_vendor_data, "4321", " Vendor data correct"); - /* Ctrl+S extra keys ignored */ + /* Enter set vendor data; don't confirm and esc */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ + mock_keypress[1] = '4'; + mock_keypress[2] = '3'; + mock_keypress[3] = '2'; + mock_keypress[4] = '1'; + mock_keypress[5] = VB_KEY_ENTER; /* Set vendor data */ + mock_keypress[6] = VB_KEY_RIGHT; /* Select NO */ + mock_keypress[7] = VB_KEY_ENTER; /* Do not confirm vendor data */ + mock_keypress[8] = VB_KEY_ESC; /* Escape to boot */ + vbtlk_expect_fixed = 1; + TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK, + "Enter set vendor data, don't confirm, esc"); + TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called"); + + /* Enter set vendor data; esc, don't confirm, and change last character */ + ResetMocks(); + ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ + mock_keypress[1] = '4'; + mock_keypress[2] = '3'; + mock_keypress[3] = '2'; + mock_keypress[4] = '1'; + mock_keypress[5] = VB_KEY_ENTER; + mock_keypress[6] = VB_KEY_RIGHT; /* Select NO */ + mock_keypress[7] = VB_KEY_ENTER; /* Do not confirm vendor data */ + mock_keypress[8] = VB_KEY_BACKSPACE; /* Remove last character */ + mock_keypress[9] = 'B'; + mock_keypress[10] = VB_KEY_ENTER; /* Set vendor data */ + mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data */ + TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, + "Enter set vendor data esc, don't confirm, change last character"); + TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); + TEST_STR_EQ(set_vendor_data, "432B", " Vendor data correct"); + + /* Enter set vendor data; extra keys ignored */ + ResetMocks(); + ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = '4'; mock_keypress[2] = '3'; mock_keypress[3] = '2'; mock_keypress[4] = '1'; mock_keypress[5] = '5'; mock_keypress[6] = VB_KEY_ENTER; /* Set vendor data */ - mock_keypress[7] = VB_KEY_ENTER; /* Confirm vendor data */ + mock_keypress[7] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, - "Ctrl+S extra keys ignored"); + "Enter set vendor data extra keys ignored"); TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); TEST_STR_EQ(set_vendor_data, "4321", " Vendor data correct"); - /* Ctrl+S converts case */ + /* Enter set vendor data; converts case */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = 'a'; mock_keypress[2] = 'B'; mock_keypress[3] = 'Y'; mock_keypress[4] = 'z'; mock_keypress[5] = VB_KEY_ENTER; /* Set vendor data */ - mock_keypress[6] = VB_KEY_ENTER; /* Confirm vendor data */ + mock_keypress[6] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, - "Ctrl+S converts case"); + "Enter set vendor data converts case"); TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); TEST_STR_EQ(set_vendor_data, "ABYZ", " Vendor data correct"); - /* Ctrl+S backspace works */ + /* Enter set vendor data; backspace works */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = 'A'; mock_keypress[2] = 'B'; mock_keypress[3] = 'C'; @@ -950,16 +987,16 @@ static void VbBootDevVendorDataTest(void) mock_keypress[7] = '2'; mock_keypress[8] = '1'; mock_keypress[9] = VB_KEY_ENTER; /* Set vendor data */ - mock_keypress[10] = VB_KEY_ENTER; /* Confirm vendor data */ + mock_keypress[10] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, - "Ctrl+S backspace works"); + "Enter set vendor data backspace works"); TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); TEST_STR_EQ(set_vendor_data, "A321", " Vendor data correct"); - /* Ctrl+S invalid chars don't print */ + /* Enter set vendor data; invalid chars don't print */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = '4'; mock_keypress[2] = '-'; mock_keypress[3] = '^'; @@ -970,16 +1007,16 @@ static void VbBootDevVendorDataTest(void) mock_keypress[8] = '2'; mock_keypress[9] = '1'; mock_keypress[10] = VB_KEY_ENTER; /* Set vendor data */ - mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data */ + mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, - "Ctrl+S invalid chars don't print"); + "Enter set vendor data invalid chars don't print"); TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); TEST_STR_EQ(set_vendor_data, "4321", " Vendor data correct"); - /* Ctrl+S invalid chars don't print with backspace */ + /* Enter set vendor data; invalid chars don't print with backspace */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = '4'; mock_keypress[2] = '-'; mock_keypress[3] = VB_KEY_BACKSPACE; /* Should delete 4 */ @@ -988,16 +1025,16 @@ static void VbBootDevVendorDataTest(void) mock_keypress[6] = '1'; mock_keypress[7] = '0'; mock_keypress[8] = VB_KEY_ENTER; /* Set vendor data */ - mock_keypress[9] = VB_KEY_ENTER; /* Confirm vendor data */ + mock_keypress[9] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, - "Ctrl+S invalid chars don't print with backspace"); + "Enter set vendor data invalid chars don't print with backspace"); TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); TEST_STR_EQ(set_vendor_data, "3210", " Vendor data correct"); - /* Ctrl+S backspace only doesn't underrun */ + /* Enter set vendor data; backspace only doesn't underrun */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = 'A'; mock_keypress[2] = VB_KEY_BACKSPACE; mock_keypress[3] = VB_KEY_BACKSPACE; @@ -1006,16 +1043,16 @@ static void VbBootDevVendorDataTest(void) mock_keypress[6] = '2'; mock_keypress[7] = '1'; mock_keypress[8] = VB_KEY_ENTER; /* Set vendor data */ - mock_keypress[9] = VB_KEY_ENTER; /* Confirm vendor data */ + mock_keypress[9] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, - "Ctrl+S backspace only doesn't underrun"); + "Enter set vendor data backspace only doesn't underrun"); TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); TEST_STR_EQ(set_vendor_data, "4321", " Vendor data correct"); - /* Ctrl+S vowels not allowed after first char */ + /* Enter set vendor data; vowels not allowed after first char */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = 'A'; mock_keypress[2] = 'A'; mock_keypress[3] = 'B'; @@ -1026,16 +1063,16 @@ static void VbBootDevVendorDataTest(void) mock_keypress[8] = 'u'; mock_keypress[9] = 'D'; mock_keypress[10] = VB_KEY_ENTER; /* Set vendor data */ - mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data */ + mock_keypress[11] = VB_KEY_ENTER; /* Confirm vendor data (Default YES) */ TEST_EQ(VbBootDeveloper(ctx), VBERROR_REBOOT_REQUIRED, - "Ctrl+S vowels not allowed after first char"); + "Enter set vendor data vowels not allowed after first char"); TEST_EQ(set_vendor_data_called, 1, " VbExSetVendorData() called"); TEST_STR_EQ(set_vendor_data, "ABCD", " Vendor data correct"); - /* Ctrl+S too short */ + /* Enter set vendor data; too short */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = '1'; mock_keypress[2] = '2'; mock_keypress[3] = '3'; @@ -1045,23 +1082,24 @@ static void VbBootDevVendorDataTest(void) mock_keypress[5] = VB_KEY_ENTER; mock_keypress[6] = VB_KEY_ESC; vbtlk_expect_fixed = 1; - TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK, "Ctrl+S too short"); + TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK, + "Enter set vendor data too short"); TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called"); - /* Ctrl+S esc from set screen */ + /* Enter set vendor data; esc from set screen */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = VB_KEY_ESC; vbtlk_expect_fixed = 1; TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK, - "Ctrl+S esc from set screen"); + "Enter set vendor data esc from set screen"); TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called"); - /* Ctrl+S esc from set screen with tag */ + /* Enter set vendor data; esc from set screen with tag */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = '4'; mock_keypress[2] = '3'; mock_keypress[3] = '2'; @@ -1069,13 +1107,13 @@ static void VbBootDevVendorDataTest(void) mock_keypress[5] = VB_KEY_ESC; vbtlk_expect_fixed = 1; TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK, - "Ctrl+S esc from set screen with tag"); + "Enter set vendor data esc from set screen with tag"); TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called"); - /* Ctrl+S esc from confirm screen */ + /* Enter set vendor data; esc from confirm screen */ ResetMocks(); ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; - mock_keypress[0] = VB_KEY_CTRL('S'); + mock_keypress[0] = VB_KEY_ENTER; /* Enter vendor data setting */ mock_keypress[1] = '4'; mock_keypress[2] = '3'; mock_keypress[3] = '2'; @@ -1084,7 +1122,16 @@ static void VbBootDevVendorDataTest(void) mock_keypress[6] = VB_KEY_ESC; vbtlk_expect_fixed = 1; TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK, - "Ctrl+S esc from set screen"); + "Enter set vendor data esc from set screen"); + TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called"); + + /* Escape from vendor data warning screen */ + ResetMocks(); + ctx->flags |= VB2_CONTEXT_VENDOR_DATA_SETTABLE; + mock_keypress[0] = VB_KEY_ESC; /* Enter vendor data setting */ + vbtlk_expect_fixed = 1; + TEST_EQ(VbBootDeveloper(ctx), VB2_ERROR_MOCK, + "Enter set vendor data esc, don't confirm, change last character"); TEST_EQ(set_vendor_data_called, 0, " VbExSetVendorData() not called"); VB2_DEBUG("...done.\n"); |