]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
fdt: Fix coverity complaint about 32-bit multiplication
authorAndre Przywara <andre.przywara@arm.com>
Wed, 7 Oct 2020 10:09:42 +0000 (11:09 +0100)
committerAndre Przywara <andre.przywara@arm.com>
Wed, 7 Oct 2020 10:13:48 +0000 (11:13 +0100)
Coverity raised an eyebrow over our GICR frame size calculation:
========
    CID 362942:  Integer handling issues  (OVERFLOW_BEFORE_WIDEN)
Potentially overflowing expression "nr_cores * gicr_frame_size" with type
"unsigned int" (32 bits, unsigned) is evaluated using 32-bit arithmetic,
and then used in a context that expects an expression of type "uint64_t"
(64 bits, unsigned).
========

Even with a GICv4 (256KB frame size) we need 16384 cores to overflow
32-bit, so it's not a practical issue.

But it's also easy to fix, so let's just do that: cast gicr_frame_size
to an unsigned 64-bit integer, so that the multiplication is done in the
64-bit realm.

Change-Id: Iad10e19b9e58d5fbf9d13205fbcef0aac5ae48af
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
common/fdt_fixup.c

index a1604e74f7c6e81298033f3b41ebe954f0baa4b8..e88a5500800a3873aaaec086d3f8782e155f5680 100644 (file)
@@ -425,7 +425,8 @@ int fdt_adjust_gic_redist(void *dtb, unsigned int nr_cores,
                redist_size_32 = cpu_to_fdt32(nr_cores * gicr_frame_size);
                val = &redist_size_32;
        } else {
-               redist_size_64 = cpu_to_fdt64(nr_cores * gicr_frame_size);
+               redist_size_64 = cpu_to_fdt64(nr_cores *
+                                             (uint64_t)gicr_frame_size);
                val = &redist_size_64;
        }