[PATCH v2 5/7] cmd: allow disabling of timeout for password entry
Steffen Jaeckel
jaeckel-floss at eyet-services.de
Mon May 10 08:19:14 CEST 2021
In case a user has to enter a complicated password it is sometimes
desireable to give the user more time than the default timeout.
Enabling this feature will disable the timeout entirely in case the user
presses the <Enter> key before entering any other character.
Signed-off-by: Steffen Jaeckel <jaeckel-floss at eyet-services.de>
Reviewed-by: Simon Glass <sjg at chromium.org>
---
(no changes since v1)
common/Kconfig.boot | 8 ++++++++
common/autoboot.c | 12 +++++++++++-
2 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/common/Kconfig.boot b/common/Kconfig.boot
index f81a44b23e..f837224a8d 100644
--- a/common/Kconfig.boot
+++ b/common/Kconfig.boot
@@ -860,6 +860,14 @@ config AUTOBOOT_KEYED_CTRLC
Setting this variable provides an escape sequence from the
limited "password" strings.
+config AUTOBOOT_NEVER_TIMEOUT
+ bool "Make the password entry never time-out"
+ depends on AUTOBOOT_KEYED && AUTOBOOT_ENCRYPTION && CRYPT_PW
+ help
+ This option removes the timeout from the password entry
+ when the user first presses the <Enter> key before entering
+ any other character.
+
config AUTOBOOT_STOP_STR_ENABLE
bool "Enable fixed string to stop autobooting"
depends on AUTOBOOT_KEYED && AUTOBOOT_ENCRYPTION
diff --git a/common/autoboot.c b/common/autoboot.c
index e03c387a1f..50ab9281e7 100644
--- a/common/autoboot.c
+++ b/common/autoboot.c
@@ -62,6 +62,10 @@ static int menukey;
* or
* the config value CONFIG_AUTOBOOT_STOP_STR_CRYPT
*
+ * In case the config value CONFIG_AUTOBOOT_NEVER_TIMEOUT has been enabled
+ * this function never times out if the user presses the <Enter> key
+ * before starting to enter the password.
+ *
* @etime: Timeout value ticks (stop when get_ticks() reachs this)
* @return 0 if autoboot should continue, 1 if it should stop
*/
@@ -71,6 +75,7 @@ static int passwd_abort_crypt(uint64_t etime)
char presskey[DELAY_STOP_STR_MAX_LENGTH];
u_int presskey_len = 0;
int abort = 0;
+ int never_timeout = 0;
int err;
if (IS_ENABLED(CONFIG_AUTOBOOT_STOP_STR_ENABLE) && !crypt_env_str)
@@ -90,6 +95,11 @@ static int passwd_abort_crypt(uint64_t etime)
if ((presskey[presskey_len] == '\r') ||
(presskey[presskey_len] == '\n')) {
+ if (IS_ENABLED(CONFIG_AUTOBOOT_NEVER_TIMEOUT) &&
+ !presskey_len) {
+ never_timeout = 1;
+ continue;
+ }
presskey[presskey_len] = '\0';
err = crypt_compare(crypt_env_str, presskey,
&abort);
@@ -103,7 +113,7 @@ static int passwd_abort_crypt(uint64_t etime)
presskey_len++;
}
}
- } while (get_ticks() <= etime);
+ } while (never_timeout || get_ticks() <= etime);
return abort;
}
--
2.31.1
More information about the U-Boot
mailing list