From: Andre Przywara <andre.przyw...@arm.com>

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.przyw...@arm.com>
Message-Id: <20200921165303.9115-2-andre.przyw...@arm.com>
Signed-off-by: David Gibson <da...@gibson.dropbear.id.au>
---
 cpukit/dtc/libfdt/fdt.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/cpukit/dtc/libfdt/fdt.c b/cpukit/dtc/libfdt/fdt.c
index 37b7b93556..04e1e062f2 100644
--- a/cpukit/dtc/libfdt/fdt.c
+++ b/cpukit/dtc/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;
 
-- 
2.31.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to