[PATCH v2 24/24] security: console: add security policy for console input
Sascha Hauer
s.hauer at pengutronix.de
Wed Sep 17 06:53:44 PDT 2025
Disabling the input path of the console is the safest bet to make
barebox fully non interactive. Add a security policy for this case.
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
common/Sconfig | 11 ++++++++++-
common/console.c | 6 ++++++
common/console_simple.c | 6 ++++++
3 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/common/Sconfig b/common/Sconfig
index ec68bc2737af02cff3ce38c7bc1b9d59af2336c5..b5c585b11b20a9f106f62813263f739d74f3667f 100644
--- a/common/Sconfig
+++ b/common/Sconfig
@@ -2,6 +2,15 @@
menu "General Settings"
+config CONSOLE_INPUT
+ bool "Allow console input"
+ depends on $(kconfig-enabled,CONSOLE_SIMPLE) || $(kconfig-enabled,CONSOLE_FULL)
+ help
+ Say y here if you want to allow input on consoles. Disabling this is the safest
+ thing to make sure that a barebox build is fully non interactive. When you
+ still need to react to input for example to trigger a recovery boot then consider
+ disabling this option and disable SHELL_INTERACTIVE instead.
+
config SHELL
bool "Allow executing shell scripts"
depends on $(kconfig-enabled,SHELL_HUSH) || $(kconfig-enabled,SHELL_SIMPLE)
@@ -13,7 +22,7 @@ config SHELL
config SHELL_INTERACTIVE
bool "Allow executing interactive shell"
- depends on SHELL
+ depends on SHELL && CONSOLE_INPUT
help
An interactive shell cannot be safely executed in trusted environments. Disable
this option in lockdown security configs.
diff --git a/common/console.c b/common/console.c
index 8eff3dba925f6de077dd194651a137f30870989d..95e5fb4df33cc41f41207153d96b02406bb6d3cc 100644
--- a/common/console.c
+++ b/common/console.c
@@ -513,6 +513,9 @@ static int tstc_raw(void)
{
struct console_device *cdev;
+ if (!IS_ALLOWED(SCONFIG_CONSOLE_INPUT))
+ return 0;
+
for_each_console(cdev) {
if (!(cdev->f_active & CONSOLE_STDIN))
continue;
@@ -528,6 +531,9 @@ int getchar(void)
unsigned char ch;
uint64_t start;
+ if (!IS_ALLOWED(SCONFIG_CONSOLE_INPUT))
+ return -1;
+
/*
* For 100us we read the characters from the serial driver
* into a kfifo. This helps us not to lose characters
diff --git a/common/console_simple.c b/common/console_simple.c
index dc748d8b698140f589598190f75b0ba23892a9a4..c5f554bbee9bef92c54474a4bb48b7f162039618 100644
--- a/common/console_simple.c
+++ b/common/console_simple.c
@@ -45,6 +45,9 @@ EXPORT_SYMBOL(console_putc);
int tstc(void)
{
+ if (!IS_ALLOWED(SCONFIG_CONSOLE_INPUT))
+ return 0;
+
if (!console)
return 0;
@@ -54,6 +57,9 @@ EXPORT_SYMBOL(tstc);
int getchar(void)
{
+ if (!IS_ALLOWED(SCONFIG_CONSOLE_INPUT))
+ return -1;
+
if (!console)
return -EINVAL;
return console->getc(console);
--
2.47.3
More information about the barebox
mailing list