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>main
parent
ca19c3db2b
commit
442ea3dd15
10
libfdt/fdt.c
10
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)
|
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 (!can_assume(VALID_INPUT))
|
||||||
if ((absoffset < offset)
|
if ((absoffset < uoffset)
|
||||||
|| ((absoffset + len) < absoffset)
|
|| ((absoffset + len) < absoffset)
|
||||||
|| (absoffset + len) > fdt_totalsize(fdt))
|
|| (absoffset + len) > fdt_totalsize(fdt))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (can_assume(LATEST) || fdt_version(fdt) >= 0x11)
|
if (can_assume(LATEST) || fdt_version(fdt) >= 0x11)
|
||||||
if (((offset + len) < offset)
|
if (((uoffset + len) < uoffset)
|
||||||
|| ((offset + len) > fdt_size_dt_struct(fdt)))
|
|| ((offset + len) > fdt_size_dt_struct(fdt)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue