summaryrefslogtreecommitdiff
path: root/lib/libfdt/fdt.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2016-10-13 20:03:33 -0400
committerTom Rini <trini@konsulko.com>2016-10-13 20:03:33 -0400
commit4504062b271bf4d1cf256e4e87e156de6029e088 (patch)
treea0cac720a2687f2ed4ccf15f473d06bb7c8dcb07 /lib/libfdt/fdt.c
parent44afdc4a12b9f6f48338e7975e4f08cfe90dba74 (diff)
parent42b7600d62ae288a8c12431d232b89b26ec61721 (diff)
Merge git://git.denx.de/u-boot-fdt
Diffstat (limited to 'lib/libfdt/fdt.c')
-rw-r--r--lib/libfdt/fdt.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/libfdt/fdt.c b/lib/libfdt/fdt.c
index 96017a15a27..2055734012a 100644
--- a/lib/libfdt/fdt.c
+++ b/lib/libfdt/fdt.c
@@ -35,18 +35,19 @@ int fdt_check_header(const void *fdt)
const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len)
{
- const char *p;
+ unsigned absoffset = offset + fdt_off_dt_struct(fdt);
+
+ if ((absoffset < offset)
+ || ((absoffset + len) < absoffset)
+ || (absoffset + len) > fdt_totalsize(fdt))
+ return NULL;
if (fdt_version(fdt) >= 0x11)
if (((offset + len) < offset)
|| ((offset + len) > fdt_size_dt_struct(fdt)))
return NULL;
- p = _fdt_offset_ptr(fdt, offset);
-
- if (p + len < p)
- return NULL;
- return p;
+ return _fdt_offset_ptr(fdt, offset);
}
uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset)