Skip to content

Add __attribute_const__ to ffs()-family implementations

Kees Cook linux-alpha linux-arch linux-csky linux-hardening linux-hexagon linux-m68k linux-mips linux-parisc linux-riscv linux-s390 linux-sh linuxppc-dev lkml llvm openrisc sparclinux 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest17 patches 10 repliesIn review 1 of 17 applied

Patches in v1 1 of 17 applied

#Subject and filesSizeRepliesApplied
1/17KUnit: Introduce ffs()-family testslib/Kconfig.debug lib/tests/Makefile lib/tests/ffs_kunit.c+541 -00 replies
2/17bitops: Add __attribute_const__ to generic ffs()-family implementationsinclude/asm-generic/bitops/__ffs.h include/asm-generic/bitops/__fls.h include/asm-generic/bitops/builtin-__ffs.h +7 more+14 -140 replies
3/17csky: Add __attribute_const__ to ffs()-family implementationsarch/csky/include/asm/bitops.h+4 -41 reply
4/17x86: Add __attribute_const__ to ffs()-family implementationsarch/x86/include/asm/bitops.h+6 -60 replies
5/17powerpc: Add __attribute_const__ to ffs()-family implementationsarch/powerpc/include/asm/bitops.h+2 -23 replies
6/17sh: Add __attribute_const__ to ffs()-family implementationsarch/sh/include/asm/bitops.h+2 -20 replies
7/17alpha: Add __attribute_const__ to ffs()-family implementationsarch/alpha/include/asm/bitops.h+7 -70 replies
8/17hexagon: Add __attribute_const__ to ffs()-family implementationsarch/hexagon/include/asm/bitops.h+5 -50 replies
9/17riscv: Add __attribute_const__ to ffs()-family implementationsarch/riscv/include/asm/bitops.h+3 -31 replyApplied
10/17openrisc: Add __attribute_const__ to ffs()-family implementationsarch/openrisc/include/asm/bitops/__ffs.h arch/openrisc/include/asm/bitops/__fls.h arch/openrisc/include/asm/bitops/ffs.h +1 more+4 -41 reply
11/17m68k: Add __attribute_const__ to ffs()-family implementationsarch/m68k/include/asm/bitops.h+7 -71 reply
12/17mips: Add __attribute_const__ to ffs()-family implementationsarch/mips/include/asm/bitops.h+4 -40 replies
13/17parisc: Add __attribute_const__ to ffs()-family implementationsarch/parisc/include/asm/bitops.h+3 -31 reply
14/17s390: Add __attribute_const__ to ffs()-family implementationsarch/s390/include/asm/bitops.h+5 -51 reply
15/17xtensa: Add __attribute_const__ to ffs()-family implementationsarch/xtensa/include/asm/bitops.h+5 -50 replies
16/17sparc: Add __attribute_const__ to ffs()-family implementationsarch/sparc/include/asm/bitops_64.h+4 -40 replies
17/17KUnit: ffs: Validate all the __attribute_const__ annotationslib/tests/ffs_kunit.c+40 -00 replies

Reviews trailers per patch

7 of 17 patches have a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchStafford HorneGeert UytterhoevenHeiko CarstensMadhavan SrinivasanAlexandre GhitiHelge DellerPeter Zijlstra (Intel)Guo Ren
SeriesA-b
1/17
2/17
3/17A-b
4/17
5/17A-b
6/17
7/17
8/17
9/17T-b A-b
10/17A-b
11/17R-b A-b
12/17
13/17A-b
14/17A-b
15/17
16/17
17/17

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 8 reviewers.

Read the v1 thread

Cover letter [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
Signature · 1 line
2.34.1