From b378e8c9427b45d856d052a6df4a879a2cee670c Mon Sep 17 00:00:00 2001 From: Antony Pavlov Date: Mon, 24 Apr 2017 18:44:08 +0300 Subject: globalvar: don't use nv_device if CONFIG_NVVAR is disabled At the moment barebox crashes if CONFIG_NVVAR is disabled because of access to unregistered nv_device in get_param_by_name(&nv_device, "version"). How to reproduce the crash: barebox$ unset ARCH barebox$ unset CROSS_COMPILE barebox$ make sandbox_defconfig barebox$ sed -i "s/CONFIG_ENV_HANDLING=y/# CONFIG_ENV_HANDLING is not set/" .config barebox$ make oldconfig barebox$ ./barebox Segmentation fault Signed-off-by: Antony Pavlov Signed-off-by: Sascha Hauer --- common/globalvar.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/common/globalvar.c b/common/globalvar.c index 32ca6a24db..1ecf5134af 100644 --- a/common/globalvar.c +++ b/common/globalvar.c @@ -99,6 +99,9 @@ void dev_param_init_from_nv(struct device_d *dev, const char *name) const char *val; int ret = 0; + if (!IS_ENABLED(CONFIG_NVVAR)) + return; + if (dev == &nv_device) return; if (dev == &global_device) @@ -395,6 +398,9 @@ static void globalvar_nv_sync(const char *name) { const char *val; + if (!IS_ENABLED(CONFIG_NVVAR)) + return; + val = dev_get_param(&nv_device, name); if (val) dev_set_param(&global_device, name, val); @@ -542,6 +548,8 @@ int nvvar_save(void) const char *env = default_environment_path_get(); int ret; #define TMPDIR "/.env.tmp" + if (!IS_ENABLED(CONFIG_NVVAR)) + return -ENOSYS; if (!nv_dirty || !env) return 0; @@ -602,7 +610,9 @@ static int nv_global_param_complete(struct device_d *dev, struct string_list *sl int nv_global_complete(struct string_list *sl, char *instr) { nv_global_param_complete(&global_device, sl, instr, 0); - nv_global_param_complete(&nv_device, sl, instr, 0); + + if (IS_ENABLED(CONFIG_NVVAR)) + nv_global_param_complete(&nv_device, sl, instr, 0); return 0; } -- cgit v1.2.3