summaryrefslogtreecommitdiff
path: root/common/autoboot.c
diff options
context:
space:
mode:
authorSteffen Jaeckel <jaeckel-floss@eyet-services.de>2021-07-08 16:57:37 +0300
committerTom Rini <trini@konsulko.com>2021-07-23 20:36:20 +0300
commit6c0ce6d3ca273f12e1cb4018144bee8e6131d30d (patch)
tree86f4cc2c0cb94fef6e04267387af8f16e366ed8e /common/autoboot.c
parent1b2d68033be5703bef482498d81e07c19f69084e (diff)
downloadu-boot-6c0ce6d3ca273f12e1cb4018144bee8e6131d30d.tar.xz
common: allow disabling of timeout for password entry
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@eyet-services.de> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'common/autoboot.c')
-rw-r--r--common/autoboot.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/common/autoboot.c b/common/autoboot.c
index 832ef7c78c..2564ef8a56 100644
--- a/common/autoboot.c
+++ b/common/autoboot.c
@@ -63,6 +63,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
*/
@@ -72,6 +76,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)
@@ -91,6 +96,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);
@@ -104,7 +114,7 @@ static int passwd_abort_crypt(uint64_t etime)
presskey_len++;
}
}
- } while (get_ticks() <= etime);
+ } while (never_timeout || get_ticks() <= etime);
return abort;
}