\r
const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len)\r
{\r
- const char *p;\r
+ unsigned absoffset = offset + fdt_off_dt_struct(fdt);\r
+\r
+ if ((absoffset < offset)\r
+ || ((absoffset + len) < absoffset)\r
+ || (absoffset + len) > fdt_totalsize(fdt))\r
+ return NULL;\r
\r
if (fdt_version(fdt) >= 0x11)\r
if (((offset + len) < offset)\r
|| ((offset + len) > fdt_size_dt_struct(fdt)))\r
return NULL;\r
\r
- p = _fdt_offset_ptr(fdt, offset);\r
-\r
- if (p + len < p)\r
- return NULL;\r
- return p;\r
+ return _fdt_offset_ptr(fdt, offset);\r
}\r
\r
uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset)\r