Thread (9 messages) flat view 9 messages, 5 authors, 2021-05-17

Re: [PATCH][next] gpio: xilinx: Fix potential integer overflow on shift of a u32 int

From: Andy Shevchenko <hidden>
Date: 2021-05-17 07:03:35
Also in: kernel-janitors, linux-arm-kernel, lkml

On Thu, May 13, 2021 at 12:12 PM Colin King [off-list ref] wrote:
From: Colin Ian King <redacted>

The left shift of the u32 integer v is evaluated using 32 bit
arithmetic and then assigned to a u64 integer. There are cases
where v will currently overflow on the shift. Avoid this by
casting it to unsigned long (same type as map[]) before shifting
it.

Addresses-Coverity: ("Unintentional integer overflow")
Fixes: 02b3f84d9080 ("gpio: xilinx: Switch to use bitmap APIs")
No, it is a false positive,
        const unsigned long offset = (bit % BITS_PER_LONG) & BIT(5);
See above, offset is 0 when BITS_PER_LONG == 32 and 32 when it's equal to 64.
-       map[index] |= v << offset;
+       map[index] |= (unsigned long)v << offset;
-- 
With Best Regards,
Andy Shevchenko
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help