On Thu, Aug 13, 2020 at 05:26:26PM +0200, Frank Mehnert wrote: > fdt_check_node_offset_() checks for a valid offset but also changes the > offset by calling fdt_next_tag(). Hence, do not skip this function if > ASSUME_VALID_INPUT is set but only omit the initial offset check in that > case. > > As this function works very similar to fdt_check_prop_offset_(), do the > offset check there as well depending on ASSUME_VALID_INPUT. So, it looks like your mailer has mangled the patch (replacing tabs with spaces). Since it's simple, I fixed it up this time, though. Applied. > --- > libfdt/fdt.c | 16 ++++++++++------ > 1 file changed, 10 insertions(+), 6 deletions(-) > > diff --git a/libfdt/fdt.c b/libfdt/fdt.c > index c28fcc1..37b7b93 100644 > --- a/libfdt/fdt.c > +++ b/libfdt/fdt.c > @@ -206,10 +206,11 @@ uint32_t fdt_next_tag(const void *fdt, int startoffset, int *nextoffset) > > int fdt_check_node_offset_(const void *fdt, int offset) > { > - if (can_assume(VALID_INPUT)) > - return offset; > - if ((offset < 0) || (offset % FDT_TAGSIZE) > - || (fdt_next_tag(fdt, offset, &offset) != FDT_BEGIN_NODE)) > + if (!can_assume(VALID_INPUT) > + && ((offset < 0) || (offset % FDT_TAGSIZE))) > + return -FDT_ERR_BADOFFSET; > + > + if (fdt_next_tag(fdt, offset, &offset) != FDT_BEGIN_NODE) > return -FDT_ERR_BADOFFSET; > > return offset; > @@ -217,8 +218,11 @@ int fdt_check_node_offset_(const void *fdt, int offset) > > int fdt_check_prop_offset_(const void *fdt, int offset) > { > - if ((offset < 0) || (offset % FDT_TAGSIZE) > - || (fdt_next_tag(fdt, offset, &offset) != FDT_PROP)) > + if (!can_assume(VALID_INPUT) > + && ((offset < 0) || (offset % FDT_TAGSIZE))) > + return -FDT_ERR_BADOFFSET; > + > + if (fdt_next_tag(fdt, offset, &offset) != FDT_PROP) > return -FDT_ERR_BADOFFSET; > > return offset; -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
Attachment:
signature.asc
Description: PGP signature