* [PATCH v2 0/3] environment: allow board code to suppress external env loading
@ 2025-12-11 20:48 Ahmad Fatoum
2025-12-11 20:48 ` [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded Ahmad Fatoum
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Ahmad Fatoum @ 2025-12-11 20:48 UTC (permalink / raw)
To: barebox; +Cc: Ahmad Fatoum
It can be useful for board code to deny loading an environment without
disabling it altogether, e.g. to disable load of the environment when
entering a recovery mode. Add a function for that.
Ahmad Fatoum (3):
globalvar: suppress nvvar_save when no external environment was loaded
startup: bump down log message about lack of persistent environment
environment: allow board code to suppress external env loading
common/environment.c | 7 +++++++
common/globalvar.c | 8 +++++++-
common/startup.c | 18 +++++++++++++-----
include/envfs.h | 5 +++++
include/globalvar.h | 1 +
5 files changed, 33 insertions(+), 6 deletions(-)
--
2.47.3
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded 2025-12-11 20:48 [PATCH v2 0/3] environment: allow board code to suppress external env loading Ahmad Fatoum @ 2025-12-11 20:48 ` Ahmad Fatoum 2025-12-12 9:37 ` Sascha Hauer 2025-12-11 20:48 ` [PATCH v2 2/3] startup: bump down log message about lack of persistent environment Ahmad Fatoum 2025-12-11 20:48 ` [PATCH v2 3/3] environment: allow board code to suppress external env loading Ahmad Fatoum 2 siblings, 1 reply; 9+ messages in thread From: Ahmad Fatoum @ 2025-12-11 20:48 UTC (permalink / raw) To: barebox; +Cc: Ahmad Fatoum nvvar_save will load the extenral environment before writing it back with nv changed, which we means we still end up parsing the environment in this case, even if we don't execute init scripts or import nv out of it. Fix this to only parse the environment when we actually loaded it before. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- common/environment.c | 7 +++++++ common/globalvar.c | 8 +++++++- include/globalvar.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/common/environment.c b/common/environment.c index 0e551c90352e..ec14d0629a14 100644 --- a/common/environment.c +++ b/common/environment.c @@ -453,6 +453,7 @@ int envfs_load(const char *filename, const char *dir, unsigned flags) int envfd; int ret = 0; size_t size, rsize; + __maybe_unused const char *defenv_path; #ifdef __BAREBOX__ if (!IS_ALLOWED(SCONFIG_ENVIRONMENT_LOAD)) @@ -531,6 +532,12 @@ int envfs_load(const char *filename, const char *dir, unsigned flags) ret = 0; +#ifdef CONFIG_NVVAR + defenv_path = default_environment_path_get(); + if (defenv_path && !strcmp(filename, defenv_path)) + nv_var_set_persistable(); +#endif + out: close(envfd); free(buf); diff --git a/common/globalvar.c b/common/globalvar.c index 77af6733a6a0..1e06fb43775f 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -15,6 +15,7 @@ #include <fnmatch.h> static int nv_dirty; +static bool nv_persistable; struct device global_device = { .name = "global", @@ -31,6 +32,11 @@ void nv_var_set_clean(void) nv_dirty = 0; } +void nv_var_set_persistable(void) +{ + nv_persistable = true; +} + void globalvar_remove(const char *name) { struct param_d *p, *tmp; @@ -713,7 +719,7 @@ int nvvar_save(void) const char *env = default_environment_path_get(); int ret = 0; #define TMPDIR "/.env.tmp" - if (!nv_dirty || !env) + if (!nv_dirty || !env || !nv_persistable) return 0; if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT)) diff --git a/include/globalvar.h b/include/globalvar.h index df32f22403bc..d0a8272588b4 100644 --- a/include/globalvar.h +++ b/include/globalvar.h @@ -148,6 +148,7 @@ static inline void globalvar_alias_deprecated(const char *newname, const char *o #endif void nv_var_set_clean(void); +void nv_var_set_persistable(void); int nvvar_save(void); int nv_complete(struct string_list *sl, char *instr); int global_complete(struct string_list *sl, char *instr); -- 2.47.3 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded 2025-12-11 20:48 ` [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded Ahmad Fatoum @ 2025-12-12 9:37 ` Sascha Hauer 2025-12-12 13:25 ` Ahmad Fatoum 0 siblings, 1 reply; 9+ messages in thread From: Sascha Hauer @ 2025-12-12 9:37 UTC (permalink / raw) To: Ahmad Fatoum; +Cc: barebox On Thu, Dec 11, 2025 at 09:48:10PM +0100, Ahmad Fatoum wrote: > nvvar_save will load the extenral environment before writing it back > with nv changed, which we means we still end up parsing the environment > in this case, even if we don't execute init scripts or import nv out of > it. > > Fix this to only parse the environment when we actually loaded it > before. > > Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> > --- > common/environment.c | 7 +++++++ > common/globalvar.c | 8 +++++++- > include/globalvar.h | 1 + > 3 files changed, 15 insertions(+), 1 deletion(-) > > diff --git a/common/environment.c b/common/environment.c > index 0e551c90352e..ec14d0629a14 100644 > --- a/common/environment.c > +++ b/common/environment.c > @@ -453,6 +453,7 @@ int envfs_load(const char *filename, const char *dir, unsigned flags) > int envfd; > int ret = 0; > size_t size, rsize; > + __maybe_unused const char *defenv_path; > > #ifdef __BAREBOX__ > if (!IS_ALLOWED(SCONFIG_ENVIRONMENT_LOAD)) > @@ -531,6 +532,12 @@ int envfs_load(const char *filename, const char *dir, unsigned flags) > > ret = 0; > > +#ifdef CONFIG_NVVAR > + defenv_path = default_environment_path_get(); > + if (defenv_path && !strcmp(filename, defenv_path)) > + nv_var_set_persistable(); > +#endif > + > out: > close(envfd); > free(buf); > diff --git a/common/globalvar.c b/common/globalvar.c > index 77af6733a6a0..1e06fb43775f 100644 > --- a/common/globalvar.c > +++ b/common/globalvar.c > @@ -15,6 +15,7 @@ > #include <fnmatch.h> > > static int nv_dirty; > +static bool nv_persistable; > > struct device global_device = { > .name = "global", > @@ -31,6 +32,11 @@ void nv_var_set_clean(void) > nv_dirty = 0; > } > > +void nv_var_set_persistable(void) > +{ > + nv_persistable = true; > +} > + > void globalvar_remove(const char *name) > { > struct param_d *p, *tmp; > @@ -713,7 +719,7 @@ int nvvar_save(void) > const char *env = default_environment_path_get(); > int ret = 0; > #define TMPDIR "/.env.tmp" > - if (!nv_dirty || !env) > + if (!nv_dirty || !env || !nv_persistable) > return 0; With this "nv -s" or whatever calls this just silently does nothing. This doesn't sound like a desired behaviour. At least a message would be useful. What's the purpose of this patch anyway? Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded 2025-12-12 9:37 ` Sascha Hauer @ 2025-12-12 13:25 ` Ahmad Fatoum 2025-12-12 14:04 ` Sascha Hauer 0 siblings, 1 reply; 9+ messages in thread From: Ahmad Fatoum @ 2025-12-12 13:25 UTC (permalink / raw) To: Sascha Hauer; +Cc: barebox Hello Sascha, On 12/12/25 10:37 AM, Sascha Hauer wrote: > On Thu, Dec 11, 2025 at 09:48:10PM +0100, Ahmad Fatoum wrote: >> nvvar_save will load the extenral environment before writing it back >> with nv changed, which we means we still end up parsing the environment >> in this case, even if we don't execute init scripts or import nv out of >> it. >> >> Fix this to only parse the environment when we actually loaded it >> before. >> >> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> >> --- >> common/environment.c | 7 +++++++ >> common/globalvar.c | 8 +++++++- >> include/globalvar.h | 1 + >> 3 files changed, 15 insertions(+), 1 deletion(-) >> >> diff --git a/common/environment.c b/common/environment.c >> index 0e551c90352e..ec14d0629a14 100644 >> --- a/common/environment.c >> +++ b/common/environment.c >> @@ -453,6 +453,7 @@ int envfs_load(const char *filename, const char *dir, unsigned flags) >> int envfd; >> int ret = 0; >> size_t size, rsize; >> + __maybe_unused const char *defenv_path; >> >> #ifdef __BAREBOX__ >> if (!IS_ALLOWED(SCONFIG_ENVIRONMENT_LOAD)) >> @@ -531,6 +532,12 @@ int envfs_load(const char *filename, const char *dir, unsigned flags) >> >> ret = 0; >> >> +#ifdef CONFIG_NVVAR >> + defenv_path = default_environment_path_get(); >> + if (defenv_path && !strcmp(filename, defenv_path)) >> + nv_var_set_persistable(); >> +#endif >> + >> out: >> close(envfd); >> free(buf); >> diff --git a/common/globalvar.c b/common/globalvar.c >> index 77af6733a6a0..1e06fb43775f 100644 >> --- a/common/globalvar.c >> +++ b/common/globalvar.c >> @@ -15,6 +15,7 @@ >> #include <fnmatch.h> >> >> static int nv_dirty; >> +static bool nv_persistable; >> >> struct device global_device = { >> .name = "global", >> @@ -31,6 +32,11 @@ void nv_var_set_clean(void) >> nv_dirty = 0; >> } >> >> +void nv_var_set_persistable(void) >> +{ >> + nv_persistable = true; >> +} >> + >> void globalvar_remove(const char *name) >> { >> struct param_d *p, *tmp; >> @@ -713,7 +719,7 @@ int nvvar_save(void) >> const char *env = default_environment_path_get(); >> int ret = 0; >> #define TMPDIR "/.env.tmp" >> - if (!nv_dirty || !env) >> + if (!nv_dirty || !env || !nv_persistable) >> return 0; > > With this "nv -s" or whatever calls this just silently does nothing. > This doesn't sound like a desired behaviour. At least a message would be > useful. > > What's the purpose of this patch anyway? In a later commit, we skip envfs_load if autoload_external_env() is disabled. I thought that it's strange for nv -s to still load the external environment to write variables into it. Cheers, Ahmad > > Sascha > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded 2025-12-12 13:25 ` Ahmad Fatoum @ 2025-12-12 14:04 ` Sascha Hauer 0 siblings, 0 replies; 9+ messages in thread From: Sascha Hauer @ 2025-12-12 14:04 UTC (permalink / raw) To: Ahmad Fatoum; +Cc: barebox On Fri, Dec 12, 2025 at 02:25:54PM +0100, Ahmad Fatoum wrote: > Hello Sascha, > > On 12/12/25 10:37 AM, Sascha Hauer wrote: > > On Thu, Dec 11, 2025 at 09:48:10PM +0100, Ahmad Fatoum wrote: > >> nvvar_save will load the extenral environment before writing it back > >> with nv changed, which we means we still end up parsing the environment > >> in this case, even if we don't execute init scripts or import nv out of > >> it. > >> > >> Fix this to only parse the environment when we actually loaded it > >> before. > >> > >> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> > >> --- > >> common/environment.c | 7 +++++++ > >> common/globalvar.c | 8 +++++++- > >> include/globalvar.h | 1 + > >> 3 files changed, 15 insertions(+), 1 deletion(-) > >> > >> diff --git a/common/environment.c b/common/environment.c > >> index 0e551c90352e..ec14d0629a14 100644 > >> --- a/common/environment.c > >> +++ b/common/environment.c > >> @@ -453,6 +453,7 @@ int envfs_load(const char *filename, const char *dir, unsigned flags) > >> int envfd; > >> int ret = 0; > >> size_t size, rsize; > >> + __maybe_unused const char *defenv_path; > >> > >> #ifdef __BAREBOX__ > >> if (!IS_ALLOWED(SCONFIG_ENVIRONMENT_LOAD)) > >> @@ -531,6 +532,12 @@ int envfs_load(const char *filename, const char *dir, unsigned flags) > >> > >> ret = 0; > >> > >> +#ifdef CONFIG_NVVAR > >> + defenv_path = default_environment_path_get(); > >> + if (defenv_path && !strcmp(filename, defenv_path)) > >> + nv_var_set_persistable(); > >> +#endif > >> + > >> out: > >> close(envfd); > >> free(buf); > >> diff --git a/common/globalvar.c b/common/globalvar.c > >> index 77af6733a6a0..1e06fb43775f 100644 > >> --- a/common/globalvar.c > >> +++ b/common/globalvar.c > >> @@ -15,6 +15,7 @@ > >> #include <fnmatch.h> > >> > >> static int nv_dirty; > >> +static bool nv_persistable; > >> > >> struct device global_device = { > >> .name = "global", > >> @@ -31,6 +32,11 @@ void nv_var_set_clean(void) > >> nv_dirty = 0; > >> } > >> > >> +void nv_var_set_persistable(void) > >> +{ > >> + nv_persistable = true; > >> +} > >> + > >> void globalvar_remove(const char *name) > >> { > >> struct param_d *p, *tmp; > >> @@ -713,7 +719,7 @@ int nvvar_save(void) > >> const char *env = default_environment_path_get(); > >> int ret = 0; > >> #define TMPDIR "/.env.tmp" > >> - if (!nv_dirty || !env) > >> + if (!nv_dirty || !env || !nv_persistable) > >> return 0; > > > > With this "nv -s" or whatever calls this just silently does nothing. > > This doesn't sound like a desired behaviour. At least a message would be > > useful. > > > > What's the purpose of this patch anyway? > > In a later commit, we skip envfs_load if autoload_external_env() is > disabled. I thought that it's strange for nv -s to still load the > external environment to write variables into it. Ok. I think a message for this would be good. Sascha -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 2/3] startup: bump down log message about lack of persistent environment 2025-12-11 20:48 [PATCH v2 0/3] environment: allow board code to suppress external env loading Ahmad Fatoum 2025-12-11 20:48 ` [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded Ahmad Fatoum @ 2025-12-11 20:48 ` Ahmad Fatoum 2025-12-11 20:48 ` [PATCH v2 3/3] environment: allow board code to suppress external env loading Ahmad Fatoum 2 siblings, 0 replies; 9+ messages in thread From: Ahmad Fatoum @ 2025-12-11 20:48 UTC (permalink / raw) To: barebox; +Cc: Ahmad Fatoum Not having a persisted environment is expected behavior in some configurations, so emit it at info log level. While at it, reword in preparation for the follow-up commit. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- common/startup.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/common/startup.c b/common/startup.c index 53003b88bc1b..b6f8a49bb94b 100644 --- a/common/startup.c +++ b/common/startup.c @@ -99,12 +99,10 @@ static int load_environment(void) ERR_PTR(ret)); } - if (IS_ENABLED(CONFIG_ENV_HANDLING)) { + if (IS_ENABLED(CONFIG_ENV_HANDLING)) envfs_load(default_environment_path, "/env", 0); - } else { - if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT)) - pr_notice("No support for persistent environment. Using default environment\n"); - } + else if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT)) + pr_info("external environment support disabled. Using default environment\n"); nvvar_load(); -- 2.47.3 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 3/3] environment: allow board code to suppress external env loading 2025-12-11 20:48 [PATCH v2 0/3] environment: allow board code to suppress external env loading Ahmad Fatoum 2025-12-11 20:48 ` [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded Ahmad Fatoum 2025-12-11 20:48 ` [PATCH v2 2/3] startup: bump down log message about lack of persistent environment Ahmad Fatoum @ 2025-12-11 20:48 ` Ahmad Fatoum 2025-12-12 9:24 ` Marco Felsch 2 siblings, 1 reply; 9+ messages in thread From: Ahmad Fatoum @ 2025-12-11 20:48 UTC (permalink / raw) To: barebox; +Cc: Ahmad Fatoum It can be useful for board code to deny loading an environment without disabling it altogether, e.g. to disable load of the environment when entering a recovery mode. Add a function for that. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- common/startup.c | 14 ++++++++++++-- include/envfs.h | 5 +++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/common/startup.c b/common/startup.c index b6f8a49bb94b..73cf4a495b9c 100644 --- a/common/startup.c +++ b/common/startup.c @@ -85,6 +85,15 @@ static int mount_root(void) fs_initcall(mount_root); #endif +static bool may_autoload_external_env = IS_ENABLED(CONFIG_ENV_HANDLING); + +#ifdef CONFIG_ENV_HANDLING +void autoload_external_env(bool endis) +{ + may_autoload_external_env = endis; +} +#endif + static int load_environment(void) { const char *default_environment_path; @@ -99,10 +108,11 @@ static int load_environment(void) ERR_PTR(ret)); } - if (IS_ENABLED(CONFIG_ENV_HANDLING)) + if (may_autoload_external_env) envfs_load(default_environment_path, "/env", 0); else if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT)) - pr_info("external environment support disabled. Using default environment\n"); + pr_info("external environment support %s. Using default environment\n", + IS_ENABLED(CONFIG_ENV_HANDLING) ? "disallowed" : "disabled"); nvvar_load(); diff --git a/include/envfs.h b/include/envfs.h index e21f2b52368a..0c6b2e681515 100644 --- a/include/envfs.h +++ b/include/envfs.h @@ -105,6 +105,7 @@ int envfs_load_from_buf(void *buf, int len, const char *dir, unsigned flags); #ifdef CONFIG_ENV_HANDLING void default_environment_path_set(const char *path); const char *default_environment_path_get(void); +void autoload_external_env(bool endis); #else static inline void default_environment_path_set(const char *path) { @@ -114,6 +115,10 @@ static inline const char *default_environment_path_get(void) { return NULL; } + +static inline void autoload_external_env(bool endis) +{ +} #endif #ifdef CONFIG_OF_BAREBOX_DRIVERS -- 2.47.3 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 3/3] environment: allow board code to suppress external env loading 2025-12-11 20:48 ` [PATCH v2 3/3] environment: allow board code to suppress external env loading Ahmad Fatoum @ 2025-12-12 9:24 ` Marco Felsch 2025-12-12 9:30 ` Ahmad Fatoum 0 siblings, 1 reply; 9+ messages in thread From: Marco Felsch @ 2025-12-12 9:24 UTC (permalink / raw) To: Ahmad Fatoum; +Cc: barebox Hi Ahmad, On 25-12-11, Ahmad Fatoum wrote: > It can be useful for board code to deny loading an environment without > disabling it altogether, e.g. to disable load of the environment when > entering a recovery mode. Add a function for that. out of curiosity, why can't we use the security profile handling for this as well? Why is the ext. env handling so special compared to the other use-cases which make use of the security profiles? Regards, Marco > > Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> > --- > common/startup.c | 14 ++++++++++++-- > include/envfs.h | 5 +++++ > 2 files changed, 17 insertions(+), 2 deletions(-) > > diff --git a/common/startup.c b/common/startup.c > index b6f8a49bb94b..73cf4a495b9c 100644 > --- a/common/startup.c > +++ b/common/startup.c > @@ -85,6 +85,15 @@ static int mount_root(void) > fs_initcall(mount_root); > #endif > > +static bool may_autoload_external_env = IS_ENABLED(CONFIG_ENV_HANDLING); > + > +#ifdef CONFIG_ENV_HANDLING > +void autoload_external_env(bool endis) > +{ > + may_autoload_external_env = endis; > +} > +#endif > + > static int load_environment(void) > { > const char *default_environment_path; > @@ -99,10 +108,11 @@ static int load_environment(void) > ERR_PTR(ret)); > } > > - if (IS_ENABLED(CONFIG_ENV_HANDLING)) > + if (may_autoload_external_env) > envfs_load(default_environment_path, "/env", 0); > else if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT)) > - pr_info("external environment support disabled. Using default environment\n"); > + pr_info("external environment support %s. Using default environment\n", > + IS_ENABLED(CONFIG_ENV_HANDLING) ? "disallowed" : "disabled"); > > nvvar_load(); > > diff --git a/include/envfs.h b/include/envfs.h > index e21f2b52368a..0c6b2e681515 100644 > --- a/include/envfs.h > +++ b/include/envfs.h > @@ -105,6 +105,7 @@ int envfs_load_from_buf(void *buf, int len, const char *dir, unsigned flags); > #ifdef CONFIG_ENV_HANDLING > void default_environment_path_set(const char *path); > const char *default_environment_path_get(void); > +void autoload_external_env(bool endis); > #else > static inline void default_environment_path_set(const char *path) > { > @@ -114,6 +115,10 @@ static inline const char *default_environment_path_get(void) > { > return NULL; > } > + > +static inline void autoload_external_env(bool endis) > +{ > +} > #endif > > #ifdef CONFIG_OF_BAREBOX_DRIVERS > -- > 2.47.3 > > > -- #gernperDu #CallMeByMyFirstName Pengutronix e.K. | | Steuerwalder Str. 21 | https://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 | ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 3/3] environment: allow board code to suppress external env loading 2025-12-12 9:24 ` Marco Felsch @ 2025-12-12 9:30 ` Ahmad Fatoum 0 siblings, 0 replies; 9+ messages in thread From: Ahmad Fatoum @ 2025-12-12 9:30 UTC (permalink / raw) To: Marco Felsch; +Cc: barebox, Fabian Pflug Hi, On 12/12/25 10:24 AM, Marco Felsch wrote: > Hi Ahmad, > > On 25-12-11, Ahmad Fatoum wrote: >> It can be useful for board code to deny loading an environment without >> disabling it altogether, e.g. to disable load of the environment when >> entering a recovery mode. Add a function for that. > > out of curiosity, why can't we use the security profile handling for > this as well? Why is the ext. env handling so special compared to the > other use-cases which make use of the security profiles? There was some discussions initially (triggered by Fabian) whether security policies should just be policies and be usable for configuring other things as well. My opinion then and now is that an explicit goal of security policies is that there are no implicit defaults and that every question you are asked has actual security implications for you. Other configuration should remain as before as magic variables. In the case here, the new option only prevents loading the default environment initially, but it doesn't preclude loading one manually later and saving it. This is different than what the security policy does, which wholesale disables the feature. Cheers, Ahmad > > Regards, > Marco > >> >> Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> >> --- >> common/startup.c | 14 ++++++++++++-- >> include/envfs.h | 5 +++++ >> 2 files changed, 17 insertions(+), 2 deletions(-) >> >> diff --git a/common/startup.c b/common/startup.c >> index b6f8a49bb94b..73cf4a495b9c 100644 >> --- a/common/startup.c >> +++ b/common/startup.c >> @@ -85,6 +85,15 @@ static int mount_root(void) >> fs_initcall(mount_root); >> #endif >> >> +static bool may_autoload_external_env = IS_ENABLED(CONFIG_ENV_HANDLING); >> + >> +#ifdef CONFIG_ENV_HANDLING >> +void autoload_external_env(bool endis) >> +{ >> + may_autoload_external_env = endis; >> +} >> +#endif >> + >> static int load_environment(void) >> { >> const char *default_environment_path; >> @@ -99,10 +108,11 @@ static int load_environment(void) >> ERR_PTR(ret)); >> } >> >> - if (IS_ENABLED(CONFIG_ENV_HANDLING)) >> + if (may_autoload_external_env) >> envfs_load(default_environment_path, "/env", 0); >> else if (IS_ENABLED(CONFIG_DEFAULT_ENVIRONMENT)) >> - pr_info("external environment support disabled. Using default environment\n"); >> + pr_info("external environment support %s. Using default environment\n", >> + IS_ENABLED(CONFIG_ENV_HANDLING) ? "disallowed" : "disabled"); >> >> nvvar_load(); >> >> diff --git a/include/envfs.h b/include/envfs.h >> index e21f2b52368a..0c6b2e681515 100644 >> --- a/include/envfs.h >> +++ b/include/envfs.h >> @@ -105,6 +105,7 @@ int envfs_load_from_buf(void *buf, int len, const char *dir, unsigned flags); >> #ifdef CONFIG_ENV_HANDLING >> void default_environment_path_set(const char *path); >> const char *default_environment_path_get(void); >> +void autoload_external_env(bool endis); >> #else >> static inline void default_environment_path_set(const char *path) >> { >> @@ -114,6 +115,10 @@ static inline const char *default_environment_path_get(void) >> { >> return NULL; >> } >> + >> +static inline void autoload_external_env(bool endis) >> +{ >> +} >> #endif >> >> #ifdef CONFIG_OF_BAREBOX_DRIVERS >> -- >> 2.47.3 >> >> >> > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-12-12 14:05 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2025-12-11 20:48 [PATCH v2 0/3] environment: allow board code to suppress external env loading Ahmad Fatoum 2025-12-11 20:48 ` [PATCH v2 1/3] globalvar: suppress nvvar_save when no external environment was loaded Ahmad Fatoum 2025-12-12 9:37 ` Sascha Hauer 2025-12-12 13:25 ` Ahmad Fatoum 2025-12-12 14:04 ` Sascha Hauer 2025-12-11 20:48 ` [PATCH v2 2/3] startup: bump down log message about lack of persistent environment Ahmad Fatoum 2025-12-11 20:48 ` [PATCH v2 3/3] environment: allow board code to suppress external env loading Ahmad Fatoum 2025-12-12 9:24 ` Marco Felsch 2025-12-12 9:30 ` Ahmad Fatoum
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox