Commit 36843bfb authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull hardening updates from Kees Cook:

 - Disable __counted_by in Clang < 19.1.3 (Jan Hendrik Farr)

 - string_helpers: Silence output truncation warning (Bartosz
   Golaszewski)

 - compiler.h: Avoid needing BUILD_BUG_ON_ZERO() (Philipp Reisner)

 - MAINTAINERS: Add kernel hardening keywords __counted_by{_le|_be}
   (Thorsten Blum)

* tag 'hardening-v6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  Compiler Attributes: disable __counted_by for clang < 19.1.3
  compiler.h: Fix undefined BUILD_BUG_ON_ZERO()
  lib: string_helpers: silence snprintf() output truncation warning
  MAINTAINERS: Add kernel hardening keywords __counted_by{_le|_be}
parents 573f45a9 f06e108a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -12403,7 +12403,7 @@ F: mm/usercopy.c
F:	security/Kconfig.hardening
K:	\b(add|choose)_random_kstack_offset\b
K:	\b__check_(object_size|heap_object)\b
K:	\b__counted_by\b
K:	\b__counted_by(_le|_be)?\b
KERNEL JANITORS
L:	kernel-janitors@vger.kernel.org
+1 −1
Original line number Diff line number Diff line
@@ -445,7 +445,7 @@ static void lkdtm_FAM_BOUNDS(void)

	pr_err("FAIL: survived access of invalid flexible array member index!\n");

	if (!__has_attribute(__counted_by__))
	if (!IS_ENABLED(CONFIG_CC_HAS_COUNTED_BY))
		pr_warn("This is expected since this %s was built with a compiler that does not support __counted_by\n",
			lkdtm_kernel_info);
	else if (IS_ENABLED(CONFIG_UBSAN_BOUNDS))
+9 −2
Original line number Diff line number Diff line
@@ -239,11 +239,18 @@ static inline void *offset_to_ptr(const int *off)

#endif /* __ASSEMBLY__ */

#ifdef __CHECKER__
#define __BUILD_BUG_ON_ZERO_MSG(e, msg) (0)
#else /* __CHECKER__ */
#define __BUILD_BUG_ON_ZERO_MSG(e, msg) ((int)sizeof(struct {_Static_assert(!(e), msg);}))
#endif /* __CHECKER__ */

/* &a[0] degrades to a pointer: a different type from an array */
#define __must_be_array(a)	BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
#define __must_be_array(a)	__BUILD_BUG_ON_ZERO_MSG(__same_type((a), &(a)[0]), "must be array")

/* Require C Strings (i.e. NUL-terminated) lack the "nonstring" attribute. */
#define __must_be_cstr(p)	BUILD_BUG_ON_ZERO(__annotated(p, nonstring))
#define __must_be_cstr(p) \
	__BUILD_BUG_ON_ZERO_MSG(__annotated(p, nonstring), "must be cstr (NUL-terminated)")

/*
 * This returns a constant expression while determining if an argument is
+0 −13
Original line number Diff line number Diff line
@@ -94,19 +94,6 @@
# define __copy(symbol)
#endif

/*
 * Optional: only supported since gcc >= 15
 * Optional: only supported since clang >= 18
 *
 *   gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
 * clang: https://github.com/llvm/llvm-project/pull/76348
 */
#if __has_attribute(__counted_by__)
# define __counted_by(member)		__attribute__((__counted_by__(member)))
#else
# define __counted_by(member)
#endif

/*
 * Optional: not supported by gcc
 * Optional: only supported since clang >= 14.0
+19 −0
Original line number Diff line number Diff line
@@ -329,6 +329,25 @@ struct ftrace_likely_data {
#define __no_sanitize_or_inline __always_inline
#endif

/*
 * Optional: only supported since gcc >= 15
 * Optional: only supported since clang >= 18
 *
 *   gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
 * clang: https://github.com/llvm/llvm-project/pull/76348
 *
 * __bdos on clang < 19.1.2 can erroneously return 0:
 * https://github.com/llvm/llvm-project/pull/110497
 *
 * __bdos on clang < 19.1.3 can be off by 4:
 * https://github.com/llvm/llvm-project/pull/112636
 */
#ifdef CONFIG_CC_HAS_COUNTED_BY
# define __counted_by(member)		__attribute__((__counted_by__(member)))
#else
# define __counted_by(member)
#endif

/*
 * Apply __counted_by() when the Endianness matches to increase test coverage.
 */
Loading