summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntony Pavlov <antonynpavlov@gmail.com>2018-12-12 15:01:03 +0300
committerSascha Hauer <s.hauer@pengutronix.de>2018-12-13 08:06:05 +0100
commit804770590556be5c922c9fb7e779e72805911e57 (patch)
tree32ad9dcb34b6df67e4e300f4ae5bd11c9b0a18d5
parentb76b1e8a7856719c187bef2d2c329635a730b9c9 (diff)
downloadbarebox-804770590556be5c922c9fb7e779e72805911e57.tar.gz
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 <antonynpavlov@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--common/globalvar.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/common/globalvar.c b/common/globalvar.c
index b9bfce7..1bea742 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);