In secure environments we shouldn't load a persistent and potentially
manipulated environment. Add a security policy for it.

Signed-off-by: Sascha Hauer <s.ha...@pengutronix.de>
---
 common/Sconfig       | 8 ++++++++
 common/environment.c | 6 ++++++
 2 files changed, 14 insertions(+)

diff --git a/common/Sconfig b/common/Sconfig
index 
ac027022e932dffd429f0b34cb8e1a199b0b595b..ec68bc2737af02cff3ce38c7bc1b9d59af2336c5
 100644
--- a/common/Sconfig
+++ b/common/Sconfig
@@ -20,6 +20,14 @@ config SHELL_INTERACTIVE
 
          Disabling this option also disables interruption with ctrl-c 
keystrokes.
 
+config ENVIRONMENT_LOAD
+       bool "Allow loading barebox environment from persistent media"
+       depends on $(kconfig-enabled,ENV_HANDLING)
+       help
+         The barebox environment doesn't have any security measures and could 
be
+         manipulated by an attacker. Loading it from persistent media imposes a
+         security risk and should thus be disabled.
+
 config RATP
        bool "Allow remote control via RATP"
        depends on $(kconfig-enabled,CONSOLE_RATP)
diff --git a/common/environment.c b/common/environment.c
index 
33ab4c43295da0c66811d16649d0d6cc1a711277..62b8120cbd7d839b0d995bfe67b4e869a9e12aee
 100644
--- a/common/environment.c
+++ b/common/environment.c
@@ -30,6 +30,7 @@
 #include <efi/partition.h>
 #include <bootsource.h>
 #include <magicvar.h>
+#include <security/config.h>
 #else
 #define EXPORT_SYMBOL(x)
 #endif
@@ -449,6 +450,11 @@ int envfs_load(const char *filename, const char *dir, 
unsigned flags)
        int ret = 0;
        size_t size, rsize;
 
+#ifdef __BAREBOX__
+       if (!IS_ALLOWED(SCONFIG_ENVIRONMENT_LOAD))
+               return -EPERM;
+#endif
+
        if (!filename)
                filename = default_environment_path_get();
        if (!filename)

-- 
2.39.5


Reply via email to