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.

kcsan, compiler_types: avoid duplicate type issues in BPF Type Format

Enabling KCSAN is causing a large number of duplicate types in BTF for
core kernel structs like task_struct [1]. This is due to the definition
in include/linux/compiler_types.h

`#ifdef __SANITIZE_THREAD__
...
`#define __data_racy volatile
..
`#else
...
`#define __data_racy
...
`#endif

Because some objects in the kernel are compiled without KCSAN flags
(KCSAN_SANITIZE) we sometimes get the empty __data_racy annotation for
objects; as a result we get multiple conflicting representations of the
associated structs in DWARF, and these lead to multiple instances of core
kernel types in BTF since they cannot be deduplicated due to the
additional modifier in some instances.

Moving the __data_racy definition under CONFIG_KCSAN avoids this problem,
since the volatile modifier will be present for both KCSAN and
KCSAN_SANITIZE objects in a CONFIG_KCSAN=y kernel.

Link: https://lkml.kernel.org/r/20260116091730.324322-1-alan.maguire@oracle.com
Fixes: 31f605a308e6 ("kcsan, compiler_types: Introduce __data_racy type qualifier")
Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
Reported-by: Nilay Shroff <nilay@linux.ibm.com>
Tested-by: Nilay Shroff <nilay@linux.ibm.com>
Suggested-by: Marco Elver <elver@google.com>
Reviewed-by: Marco Elver <elver@google.com>
Acked-by: Yonghong Song <yonghong.song@linux.dev>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: Bart van Assche <bvanassche@acm.org>
Cc: Daniel Borkman <daniel@iogearbox.net>
Cc: Eduard Zingerman <eddyz87@gmail.com>
Cc: Hao Luo <haoluo@google.com>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
Cc: Jason A. Donenfeld <jason@zx2c4.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Fastabend <john.fastabend@gmail.com>
Cc: Kees Cook <kees@kernel.org>
Cc: KP Singh <kpsingh@kernel.org>
Cc: Martin KaFai Lau <martin.lau@linux.dev>
Cc: Miguel Ojeda <ojeda@kernel.org>
Cc: Naman Jain <namjain@linux.microsoft.com>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: "Paul E . McKenney" <paulmck@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stanislav Fomichev <sdf@fomichev.me>
Cc: Uros Bizjak <ubizjak@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

Alan Maguire and committed by
Andrew Morton
9dc05223 0758293d

+16 -7
+16 -7
include/linux/compiler_types.h
··· 303 303 # define __no_kasan_or_inline __always_inline 304 304 #endif 305 305 306 + #ifdef CONFIG_KCSAN 307 + /* 308 + * Type qualifier to mark variables where all data-racy accesses should be 309 + * ignored by KCSAN. Note, the implementation simply marks these variables as 310 + * volatile, since KCSAN will treat such accesses as "marked". 311 + * 312 + * Defined here because defining __data_racy as volatile for KCSAN objects only 313 + * causes problems in BPF Type Format (BTF) generation since struct members 314 + * of core kernel data structs will be volatile in some objects and not in 315 + * others. Instead define it globally for KCSAN kernels. 316 + */ 317 + # define __data_racy volatile 318 + #else 319 + # define __data_racy 320 + #endif 321 + 306 322 #ifdef __SANITIZE_THREAD__ 307 323 /* 308 324 * Clang still emits instrumentation for __tsan_func_{entry,exit}() and builtin ··· 330 314 * disable all instrumentation. See Kconfig.kcsan where this is mandatory. 331 315 */ 332 316 # define __no_kcsan __no_sanitize_thread __disable_sanitizer_instrumentation 333 - /* 334 - * Type qualifier to mark variables where all data-racy accesses should be 335 - * ignored by KCSAN. Note, the implementation simply marks these variables as 336 - * volatile, since KCSAN will treat such accesses as "marked". 337 - */ 338 - # define __data_racy volatile 339 317 # define __no_sanitize_or_inline __no_kcsan notrace __maybe_unused 340 318 #else 341 319 # define __no_kcsan 342 - # define __data_racy 343 320 #endif 344 321 345 322 #ifdef __SANITIZE_MEMORY__