diff options
author | Andre Przywara <andre.przywara@arm.com> | 2020-09-21 17:52:50 +0100 |
---|---|---|
committer | David Gibson <david@gibson.dropbear.id.au> | 2020-09-23 21:47:35 +1000 |
commit | 442ea3dd157906ce23df8001095562d3492a471c (patch) | |
tree | 5b22a49a29c0a9afdb7b38e9d29f9bd5263e906e | |
parent | ca19c3db2bf62000101ae8f83c37cd6e0d44d218 (diff) | |
download | dtc-442ea3dd157906ce23df8001095562d3492a471c.zip dtc-442ea3dd157906ce23df8001095562d3492a471c.tar.gz dtc-442ea3dd157906ce23df8001095562d3492a471c.tar.bz2 |
libfdt: fdt_offset_ptr(): Fix comparison warnings
With -Wsign-compare, compilers warn about mismatching signedness in
comparisons in fdt_offset_ptr().
This mostly stems from "offset" being passed in as a signed integer,
even though the function would not really tolerate negative values.
Short of changing the prototype, check that offset is not negative, and
use an unsigned type internally.
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Message-Id: <20200921165303.9115-2-andre.przywara@arm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r-- | libfdt/fdt.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libfdt/fdt.c b/libfdt/fdt.c index 37b7b93..04e1e06 100644 --- a/libfdt/fdt.c +++ b/libfdt/fdt.c @@ -134,16 +134,20 @@ int fdt_check_header(const void *fdt) const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len) { - unsigned absoffset = offset + fdt_off_dt_struct(fdt); + unsigned int uoffset = offset; + unsigned int absoffset = offset + fdt_off_dt_struct(fdt); + + if (offset < 0) + return NULL; if (!can_assume(VALID_INPUT)) - if ((absoffset < offset) + if ((absoffset < uoffset) || ((absoffset + len) < absoffset) || (absoffset + len) > fdt_totalsize(fdt)) return NULL; if (can_assume(LATEST) || fdt_version(fdt) >= 0x11) - if (((offset + len) < offset) + if (((uoffset + len) < uoffset) || ((offset + len) > fdt_size_dt_struct(fdt))) return NULL; |