diff options
author | Antony Pavlov <antonynpavlov@gmail.com> | 2017-04-24 18:44:08 +0300 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2017-04-25 07:43:31 +0200 |
commit | b378e8c9427b45d856d052a6df4a879a2cee670c (patch) | |
tree | 9635ea41481fe2aab467e9cdb7a10ffe48126c48 /common/globalvar.c | |
parent | e6cc84d8b751c76571c26e935261fd6f8cac67b7 (diff) | |
download | barebox-b378e8c9427b45d856d052a6df4a879a2cee670c.tar.gz barebox-b378e8c9427b45d856d052a6df4a879a2cee670c.tar.xz |
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 <antonynpavlov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/globalvar.c')
-rw-r--r-- | common/globalvar.c | 12 |
1 files changed, 11 insertions, 1 deletions
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; } |