From 804770590556be5c922c9fb7e779e72805911e57 Mon Sep 17 00:00:00 2001 From: Antony Pavlov Date: Wed, 12 Dec 2018 15:01:03 +0300 Subject: globalvar: fix crash if CONFIG_NVVAR is not set At the moment globalvar code tries to use nv_device even if nv_device is not registered. How to reproduce the problem: barebox$ make sandbox_defconfig ... barebox$ sed -i "s/\(CONFIG_NVVAR\)=y/# \1 is not set/" .config barebox$ sed -i "s/\(CONFIG_DEFAULT_ENVIRONMENT_GENERIC_NEW\)=y/# \1 is not set\n# CONFIG_DEFAULT_ENVIRONMENT_GENERIC is not set/" .config barebox$ make oldconfig ... barebox$ make ... barebox$ ./barebox Segmentation fault This patch blocks nv_device use if CONFIG_NVVAR is not set. Signed-off-by: Antony Pavlov Signed-off-by: Sascha Hauer --- common/globalvar.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/common/globalvar.c b/common/globalvar.c index b9bfce7dac..1bea7425d4 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) @@ -138,6 +141,9 @@ static int nvvar_device_dispatch(const char *name, struct device_d **dev, const char *dot; int dotpos; + if (!IS_ENABLED(CONFIG_NVVAR)) + return -ENOSYS; + *dev = NULL; if (strncmp(name, "dev.", 4)) @@ -447,6 +453,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); -- cgit v1.2.3