summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2015-09-10 14:59:39 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2015-09-10 14:59:41 +0200
commit368c3cecb2cc27cba1f9be8d33c886548e49a042 (patch)
treeee15a56d6d0b83d0cc31d6abf47b342e043a24f5
parent755a69659c4283c5d572bcdacfa59cd4b55eddb6 (diff)
downloaddt-utils-368c3cecb2cc27cba1f9be8d33c886548e49a042.tar.gz
dt-utils-368c3cecb2cc27cba1f9be8d33c886548e49a042.tar.xz
barebox-state: Check return value of state_find_type
state_find_type can fail in which case it returns NULL. Check the return value before dereferencing the pointer. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r--src/barebox-state.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/barebox-state.c b/src/barebox-state.c
index f64347c..91a0024 100644
--- a/src/barebox-state.c
+++ b/src/barebox-state.c
@@ -1896,6 +1896,8 @@ static char *state_get_var(struct state *state, const char *var)
return NULL;
vtype = state_find_type(sv->type);
+ if (!vtype)
+ return NULL;
return vtype->get(sv);
}
@@ -1911,6 +1913,8 @@ static int state_set_var(struct state *state, const char *var, const char *val)
return PTR_ERR(sv);
vtype = state_find_type(sv->type);
+ if (!vtype)
+ return -ENODEV;
if (!vtype->set)
return -EPERM;
@@ -2095,6 +2099,10 @@ int main(int argc, char *argv[])
state_for_each_var(state, v) {
struct variable_type *vtype;
vtype = state_find_type(v->type);
+ if (!vtype) {
+ fprintf(stderr, "no such type: %d\n", v->type);
+ exit(1);
+ }
printf("%s=%s", v->name, vtype->get(v));
if (verbose) {
printf(", type=%s", vtype->type_name);