Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

lib/bch: fix signed left-shift undefined behavior

Patch series "lib/bch: fix undefined behavior from signed left-shifts".

Fix two instances of undefined behavior in lib/bch.c caused by
left-shifting signed integers into or past the sign bit.

While the kernel's -fno-strict-overflow flag prevents miscompilation
today, these are formally UB per C11 6.5.7p4 and trivial to fix.


This patch (of 2):

Use 1u instead of 1 to avoid undefined behavior when left-shifting into
the sign bit of a signed int. deg() can return up to 31, and 1 << 31 is
UB per C11.

Link: https://lkml.kernel.org/r/20260318074806.16527-2-objecting@objecting.org
Signed-off-by: Josh Law <objecting@objecting.org>
Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Ivan Djelic <ivan.djelic@parrot.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Josh Law and committed by
Andrew Morton
f42b5109 b8822d73

+2 -2
+2 -2
lib/bch.c
··· 392 392 for (j = 0; j < 2*t; j += 2) 393 393 syn[j] ^= a_pow(bch, (j+1)*(i+s)); 394 394 395 - poly ^= (1 << i); 395 + poly ^= (1u << i); 396 396 } 397 397 } while (s > 0); 398 398 ··· 612 612 while (v) { 613 613 i = deg(v); 614 614 r ^= bch->xi_tab[i]; 615 - v ^= (1 << i); 615 + v ^= (1u << i); 616 616 } 617 617 /* verify root */ 618 618 if ((gf_sqr(bch, r)^r) == u) {