summaryrefslogtreecommitdiff
path: root/libfdt/fdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'libfdt/fdt.c')
-rw-r--r--libfdt/fdt.c19
1 files changed, 5 insertions, 14 deletions
diff --git a/libfdt/fdt.c b/libfdt/fdt.c
index c17cad5..9fe7cf4 100644
--- a/libfdt/fdt.c
+++ b/libfdt/fdt.c
@@ -188,20 +188,12 @@ uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset)
break;
case FDT_PROP:
- lenp = fdt_offset_ptr(fdt, offset, sizeof(struct fdt_property) - FDT_TAGSIZE);
+ lenp = fdt_offset_ptr(fdt, offset, sizeof(*lenp));
if (!can_assume(VALID_DTB) && !lenp)
return FDT_END; /* premature end */
-
- /* skip name offset, length */
- offset += sizeof(struct fdt_property) - FDT_TAGSIZE;
-
- if (!can_assume(VALID_DTB)
- && !fdt_offset_ptr(fdt, offset, fdt32_to_cpu(*lenp)))
- return FDT_END; /* premature end */
-
- /* skip value */
- offset += fdt32_to_cpu(*lenp);
-
+ /* skip-name offset, length and value */
+ offset += sizeof(struct fdt_property) - FDT_TAGSIZE
+ + fdt32_to_cpu(*lenp);
if (!can_assume(LATEST) &&
fdt_version(fdt) < 0x10 && fdt32_to_cpu(*lenp) >= 8 &&
((offset - fdt32_to_cpu(*lenp)) % 8) != 0)
@@ -217,8 +209,7 @@ uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset)
return FDT_END;
}
- if (!can_assume(VALID_DTB) && (offset <= startoffset
- || !fdt_offset_ptr(fdt, startoffset, offset - startoffset)))
+ if (!fdt_offset_ptr(fdt, startoffset, offset - startoffset))
return FDT_END; /* premature end */
*nextoffset = FDT_TAGALIGN(offset);