aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/Kconfig.boot9
-rw-r--r--common/autoboot.c11
2 files changed, 20 insertions, 0 deletions
diff --git a/common/Kconfig.boot b/common/Kconfig.boot
index f9551b2..e0cca22 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 2564ef8..35ef526 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.