This patch series is the conclusion to [1], where we determined that due to various interactions with no_sanitize attributes and the new {READ,WRITE}_ONCE(), KCSAN will require Clang 11 or later. Other sanitizers are largely untouched, and only KCSAN now has a hard dependency on Clang 11. To test, a recent Clang development version will suffice [2]. While a little inconvenient for now, it is hoped that in future we may be able to fix GCC and re-enable GCC support.
The patch "kcsan: Restrict supported compilers" contains a detailed list of requirements that led to this decision. Most of the patches are related to KCSAN, however, the first patch also includes an UBSAN related fix and is a dependency for the remaining ones. The last 2 patches clean up the attributes by moving them to the right place, and fix KASAN's way of defining __no_kasan_or_inline, making it consistent with KCSAN. The series has been tested by running kcsan-test several times and completed successfully. [1] https://lkml.kernel.org/r/canpmjnogfqhtda9wwpxs2kztqssozbwsumo5bqqw0c0g0zg...@mail.gmail.com [2] https://github.com/llvm/llvm-project v3: * data_race() fix for 'const' non-scalar expressions. * Add a missing commit message. * Add Will's Acked-by. v2: https://lkml.kernel.org/r/20200521110854.114437-1-el...@google.com * Remove unnecessary kcsan_check_atomic in ONCE. * Simplify __READ_ONCE_SCALAR and remove __WRITE_ONCE_SCALAR. This effectively restores Will Deacon's pre-KCSAN version: https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git/tree/include/linux/compiler.h?h=rwonce/cleanup#n202 * Introduce patch making data_race() a single statement expression in response to apparent issues that compilers are having with nested statement expressions. Arnd Bergmann (1): ubsan, kcsan: don't combine sanitizer with kcov on clang Marco Elver (10): kcsan: Avoid inserting __tsan_func_entry/exit if possible kcsan: Support distinguishing volatile accesses kcsan: Pass option tsan-instrument-read-before-write to Clang kcsan: Remove 'noinline' from __no_kcsan_or_inline kcsan: Restrict supported compilers kcsan: Update Documentation to change supported compilers READ_ONCE, WRITE_ONCE: Remove data_race() and unnecessary checks data_race: Avoid nested statement expression compiler.h: Move function attributes to compiler_types.h compiler_types.h, kasan: Use __SANITIZE_ADDRESS__ instead of CONFIG_KASAN to decide inlining Documentation/dev-tools/kcsan.rst | 9 +----- include/linux/compiler.h | 54 ++++--------------------------- include/linux/compiler_types.h | 32 ++++++++++++++++++ kernel/kcsan/core.c | 43 ++++++++++++++++++++++++ lib/Kconfig.kcsan | 20 +++++++++++- lib/Kconfig.ubsan | 11 +++++++ scripts/Makefile.kcsan | 15 ++++++++- 7 files changed, 127 insertions(+), 57 deletions(-) -- 2.26.2.761.g0e0b3e54be-goog