diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/Kconfig.boot | 9 | ||||
-rw-r--r-- | common/autoboot.c | 11 |
2 files changed, 20 insertions, 0 deletions
diff --git a/common/Kconfig.boot b/common/Kconfig.boot index f9551b206f..e0cca226da 100644 --- a/common/Kconfig.boot +++ b/common/Kconfig.boot @@ -791,6 +791,15 @@ config AUTOBOOT_KEYED U-Boot automatic booting process and bring the device to the U-Boot prompt for user input. +config AUTOBOOT_FLUSH_STDIN + bool "Enable flushing stdin before starting to read the password" + depends on AUTOBOOT_KEYED && !SANDBOX + help + When this option is enabled stdin buffer will be flushed before + starting to read the password. + This can't be enabled for the sandbox as flushing stdin would + break the autoboot unit tests. + config AUTOBOOT_PROMPT string "Autoboot stop prompt" depends on AUTOBOOT_KEYED diff --git a/common/autoboot.c b/common/autoboot.c index 2564ef8a56..35ef526c42 100644 --- a/common/autoboot.c +++ b/common/autoboot.c @@ -297,6 +297,15 @@ static int passwd_abort_key(uint64_t etime) return abort; } +/** + * flush_stdin() - drops all pending characters from stdin + */ +static void flush_stdin(void) +{ + while (tstc()) + (void)getchar(); +} + /*************************************************************************** * Watch for 'delay' seconds for autoboot stop or autoboot delay string. * returns: 0 - no key string, allow autoboot 1 - got key string, abort @@ -306,6 +315,8 @@ static int abortboot_key_sequence(int bootdelay) int abort; uint64_t etime = endtick(bootdelay); + if (IS_ENABLED(CONFIG_AUTOBOOT_FLUSH_STDIN)) + flush_stdin(); # ifdef CONFIG_AUTOBOOT_PROMPT /* * CONFIG_AUTOBOOT_PROMPT includes the %d for all boards. |