diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2018-03-25 22:54:22 +1100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2018-07-19 07:01:12 +0200 |
commit | 6bc883b7370d0b655e5aba009031cde1dc2eb226 (patch) | |
tree | e83e36ca9cd41006e20694e791b4e97b3c811c92 /cpukit/dtc/libfdt/fdt_ro.c | |
parent | libfdt: Safer access to strings section (diff) | |
download | rtems-6bc883b7370d0b655e5aba009031cde1dc2eb226.tar.bz2 |
libfdt: Propagate name errors in fdt_getprop_by_offset()
fdt_getprop_by_offset() doesn't check for errors from fdt_string() - after
all, until very recently it couldn't fail. Now it can, so we need to
propagate errors up to the caller.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Tested-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'cpukit/dtc/libfdt/fdt_ro.c')
-rw-r--r-- | cpukit/dtc/libfdt/fdt_ro.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/cpukit/dtc/libfdt/fdt_ro.c b/cpukit/dtc/libfdt/fdt_ro.c index 347aa7bc8d..d4cec0efd1 100644 --- a/cpukit/dtc/libfdt/fdt_ro.c +++ b/cpukit/dtc/libfdt/fdt_ro.c @@ -461,8 +461,18 @@ const void *fdt_getprop_by_offset(const void *fdt, int offset, prop = fdt_get_property_by_offset_(fdt, offset, lenp); if (!prop) return NULL; - if (namep) - *namep = fdt_string(fdt, fdt32_to_cpu(prop->nameoff)); + if (namep) { + const char *name; + int namelen; + name = fdt_get_string(fdt, fdt32_to_cpu(prop->nameoff), + &namelen); + if (!name) { + if (lenp) + *lenp = namelen; + return NULL; + } + *namep = name; + } /* Handle realignment */ if (fdt_version(fdt) < 0x10 && (offset + sizeof(*prop)) % 8 && |