summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Schmelzer <oe5hpm@oevsv.at>2017-08-18 14:41:14 +0200
committerSimon Glass <sjg@chromium.org>2017-09-04 02:10:06 -0600
commitcee8c35d1b7101d09a1854a48f867deaa701f7bf (patch)
tree96fb5e9b82fb4b60d63027f65cb5919301ff9fcb
parent302466d07fe8f10ff2ad059dc5c40ac37935fda9 (diff)
fdt: fix 'prop (...) not found!' error in 'fdt set' command
This commit brings things back to the well known working state of the command. - With commit 9620d87259572ef21f0df60988d9a932ca673779 (cmd/fdt: support single value replacement within an array) there was an error introduced modifying (inserting) a property to a device-tree node. fdt_getprop(...) returnes a len with -1 for a non-existing property, but a memcpy with len -1 isn't a good idea and things went wrong (crash). - Some times later Tom did repair this with commit 99bb38e2cce9d99238458e0f6d1880c6d2e80a4d (fdt: Check for NULL return from fdt_getprop in 'fdt set') This repairs the crash but the behaviour of the command isn't like before, it makes it impossible to insert a property. - Signed-off-by: Hannes Schmelzer <oe5hpm@oevsv.at> Acked-by: Simon Glass <sjg@chromium.org>
-rw-r--r--cmd/fdt.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/cmd/fdt.c b/cmd/fdt.c
index 118613f405..d7654b2c4f 100644
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -284,16 +284,14 @@ static int do_fdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
len = 0;
} else {
ptmp = fdt_getprop(working_fdt, nodeoffset, prop, &len);
- if (!ptmp) {
- printf("prop (%s) not found!\n", prop);
- return 1;
- }
if (len > SCRATCHPAD) {
printf("prop (%d) doesn't fit in scratchpad!\n",
len);
return 1;
}
- memcpy(data, ptmp, len);
+ if (ptmp != NULL)
+ memcpy(data, ptmp, len);
+
ret = fdt_parse_prop(&argv[4], argc - 4, data, &len);
if (ret != 0)
return ret;