]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
common: allow disabling of timeout for password entry
authorSteffen Jaeckel <jaeckel-floss@eyet-services.de>
Thu, 8 Jul 2021 13:57:37 +0000 (15:57 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 23 Jul 2021 17:36:20 +0000 (13:36 -0400)
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>
common/Kconfig.boot
common/autoboot.c

index fe60ad0171c07d9ce79991744ae079bfa49bf129..f9551b206f5d0db6abffaf5315691381e5c0e3e9 100644 (file)
@@ -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
index 832ef7c78c1c8d6830490c6a4dcfe2339c3ad049..2564ef8a561d7de65447c9579fd41fff8d29a400 100644 (file)
@@ -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;
 }