From: Elvira Khabirova <e.khabir...@omp.ru>

UINT32_MAX is an integer of type unsigned int. UINT32_MAX + 1 overflows
unless explicitly computed as unsigned long long. This led to some
invalid addresses being treated as valid.

Cast UINT32_MAX to uint64_t explicitly.

Signed-off-by: Elvira Khabirova <e.khabir...@omp.ru>
---
 cpukit/dtc/libfdt/fdt_addresses.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/cpukit/dtc/libfdt/fdt_addresses.c 
b/cpukit/dtc/libfdt/fdt_addresses.c
index 9a82cd0ba2..c40ba094f1 100644
--- a/cpukit/dtc/libfdt/fdt_addresses.c
+++ b/cpukit/dtc/libfdt/fdt_addresses.c
@@ -73,7 +73,7 @@ int fdt_appendprop_addrrange(void *fdt, int parent, int 
nodeoffset,
        /* check validity of address */
        prop = data;
        if (addr_cells == 1) {
-               if ((addr > UINT32_MAX) || ((UINT32_MAX + 1 - addr) < size))
+               if ((addr > UINT32_MAX) || (((uint64_t) UINT32_MAX + 1 - addr) 
< size))
                        return -FDT_ERR_BADVALUE;
 
                fdt32_st(prop, (uint32_t)addr);
-- 
2.31.1

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

Reply via email to