[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250804163910.work.929-kees@kernel.org>
Date: Mon, 4 Aug 2025 09:43:56 -0700
From: Kees Cook <kees@...nel.org>
To: linux-arch@...r.kernel.org
Cc: Kees Cook <kees@...nel.org>,
linux-kernel@...r.kernel.org,
x86@...nel.org,
linux-alpha@...r.kernel.org,
linux-csky@...r.kernel.org,
linux-hexagon@...r.kernel.org,
linux-m68k@...ts.linux-m68k.org,
linux-mips@...r.kernel.org,
linux-openrisc@...r.kernel.org,
linux-parisc@...r.kernel.org,
linuxppc-dev@...ts.ozlabs.org,
linux-riscv@...ts.infradead.org,
linux-s390@...r.kernel.org,
linux-sh@...r.kernel.org,
sparclinux@...r.kernel.org,
llvm@...ts.linux.dev,
linux-hardening@...r.kernel.org
Subject: [PATCH 00/17] Add __attribute_const__ to ffs()-family implementations
Hi,
While tracking down a problem where constant expressions used by
BUILD_BUG_ON() suddenly stopped working[1], we found that an added static
initializer was convincing the compiler that it couldn't track the state
of the prior statically initialized value. Tracing this down found that
ffs() was used in the initializer macro, but since it wasn't marked with
__attribute_const__, the compiler had to assume the function might
change variable states as a side-effect (which is not true for ffs(),
which provides deterministic math results).
Add KUnit tests for the family of functions and then add __attribute_const__
to all architecture implementations and wrappers.
-Kees
[1] https://github.com/KSPP/linux/issues/364
Kees Cook (17):
KUnit: Introduce ffs()-family tests
bitops: Add __attribute_const__ to generic ffs()-family
implementations
csky: Add __attribute_const__ to ffs()-family implementations
x86: Add __attribute_const__ to ffs()-family implementations
powerpc: Add __attribute_const__ to ffs()-family implementations
sh: Add __attribute_const__ to ffs()-family implementations
alpha: Add __attribute_const__ to ffs()-family implementations
hexagon: Add __attribute_const__ to ffs()-family implementations
riscv: Add __attribute_const__ to ffs()-family implementations
openrisc: Add __attribute_const__ to ffs()-family implementations
m68k: Add __attribute_const__ to ffs()-family implementations
mips: Add __attribute_const__ to ffs()-family implementations
parisc: Add __attribute_const__ to ffs()-family implementations
s390: Add __attribute_const__ to ffs()-family implementations
xtensa: Add __attribute_const__ to ffs()-family implementations
sparc: Add __attribute_const__ to ffs()-family implementations
KUnit: ffs: Validate all the __attribute_const__ annotations
lib/Kconfig.debug | 14 +
lib/tests/Makefile | 1 +
arch/alpha/include/asm/bitops.h | 14 +-
arch/csky/include/asm/bitops.h | 8 +-
arch/hexagon/include/asm/bitops.h | 10 +-
arch/m68k/include/asm/bitops.h | 14 +-
arch/mips/include/asm/bitops.h | 8 +-
arch/openrisc/include/asm/bitops/__ffs.h | 2 +-
arch/openrisc/include/asm/bitops/__fls.h | 2 +-
arch/openrisc/include/asm/bitops/ffs.h | 2 +-
arch/openrisc/include/asm/bitops/fls.h | 2 +-
arch/parisc/include/asm/bitops.h | 6 +-
arch/powerpc/include/asm/bitops.h | 4 +-
arch/riscv/include/asm/bitops.h | 6 +-
arch/s390/include/asm/bitops.h | 10 +-
arch/sh/include/asm/bitops.h | 4 +-
arch/sparc/include/asm/bitops_64.h | 8 +-
arch/x86/include/asm/bitops.h | 12 +-
arch/xtensa/include/asm/bitops.h | 10 +-
include/asm-generic/bitops/__ffs.h | 2 +-
include/asm-generic/bitops/__fls.h | 2 +-
include/asm-generic/bitops/builtin-__ffs.h | 2 +-
include/asm-generic/bitops/builtin-__fls.h | 2 +-
include/asm-generic/bitops/builtin-fls.h | 2 +-
include/asm-generic/bitops/ffs.h | 2 +-
include/asm-generic/bitops/fls.h | 2 +-
include/asm-generic/bitops/fls64.h | 4 +-
include/linux/bitops.h | 2 +-
lib/clz_ctz.c | 8 +-
lib/tests/ffs_kunit.c | 566 +++++++++++++++++++++
30 files changed, 656 insertions(+), 75 deletions(-)
create mode 100644 lib/tests/ffs_kunit.c
--
2.34.1
Powered by blists - more mailing lists