提交 d199c3ab 编写于 作者: S Steffen Jaeckel 提交者: Tom Rini

common: add AUTOBOOT_FLUSH_STDIN option

The key-sequence based unlock mechanisms are sensitive to junk symbols
that could have been sent to stdin and are still waiting to be retrieved.
Enabling this option will read all symbols off stdin before displaying the
autoboot prompt (and starting to read the password from stdin).
Signed-off-by: NSteffen Jaeckel <jaeckel-floss@eyet-services.de>
Reviewed-by: NSimon Glass <sjg@chromium.org>
上级 6c0ce6d3
......@@ -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
......
......@@ -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.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册