]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
init/Kconfig: Require a release version of clang-22 for CC_HAS_COUNTED_BY_PTR
authorNathan Chancellor <nathan@kernel.org>
Thu, 19 Mar 2026 00:20:18 +0000 (17:20 -0700)
committerKees Cook <kees@kernel.org>
Fri, 20 Mar 2026 18:51:48 +0000 (11:51 -0700)
Commit 150a04d817d8 ("compiler_types.h: Attributes: Add __counted_by_ptr
macro") used Clang 22.0.0 as a minimum supported version for
__counted_by_ptr, which made sense while 22.0.0 was the version of
LLVM's main branch to allow developers to easily test and develop uses
of __counted_by_ptr in their code. However, __counted_by_ptr requires a
change [1] merged towards the end of the 22 development cycle to avoid
errors when applied to void pointers.

  In file included from fs/xfs/xfs_attr_inactive.c:18:
  fs/xfs/libxfs/xfs_attr.h:59:2: error: 'counted_by' cannot be applied to a pointer with pointee of unknown size because 'void' is an incomplete type
     59 |         void                    *buffer __counted_by_ptr(bufsize);
        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

This is disruptive for deployed prerelease clang-22 builds (such as
Android LLVM) or when bisecting between llvmorg-21-init and the fix.

Require a released version of clang-22 (i.e., 21.1.0 or newer) to
enabled __counted_by_ptr to ensure all fixes needed for proper support
are present.

Fixes: 150a04d817d8 ("compiler_types.h: Attributes: Add __counted_by_ptr macro")
Link: https://github.com/llvm/llvm-project/commit/f29955a594aedf5943d492a999b83e8c6b8fafae
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Link: https://patch.msgid.link/20260318-counted_by_ptr-release-clang-22-v1-1-e017da246df0@kernel.org
Signed-off-by: Kees Cook <kees@kernel.org>
init/Kconfig

index b55deae9256c70dc86004f8afffc2ea944f384f6..399c0ed3b4a91b7e5cec7eec8b0385338882ca92 100644 (file)
@@ -146,7 +146,7 @@ config CC_HAS_COUNTED_BY
 config CC_HAS_COUNTED_BY_PTR
        bool
        # supported since clang 22
-       default y if CC_IS_CLANG && CLANG_VERSION >= 220000
+       default y if CC_IS_CLANG && CLANG_VERSION >= 220100
        # supported since gcc 16.0.0
        default y if CC_IS_GCC && GCC_VERSION >= 160000