linux/kernel/kcsan
Marco Elver 0b8b0830ac kcsan: Add core memory barrier instrumentation functions
Add the core memory barrier instrumentation functions. These invalidate
the current in-flight reordered access based on the rules for the
respective barrier types and in-flight access type.

To obtain barrier instrumentation that can be disabled via __no_kcsan
with appropriate compiler-support (and not just with objtool help),
barrier instrumentation repurposes __atomic_signal_fence(), instead of
inserting explicit calls. Crucially, __atomic_signal_fence() normally
does not map to any real instructions, but is still intercepted by
fsanitize=thread. As a result, like any other instrumentation done by
the compiler, barrier instrumentation can be disabled with __no_kcsan.

Unfortunately Clang and GCC currently differ in their __no_kcsan aka
__no_sanitize_thread behaviour with respect to builtin atomics (and
__tsan_func_{entry,exit}) instrumentation. This is already reflected in
Kconfig.kcsan's dependencies for KCSAN_WEAK_MEMORY. A later change will
introduce support for newer versions of Clang that can implement
__no_kcsan to also remove the additional instrumentation introduced by
KCSAN_WEAK_MEMORY.

Signed-off-by: Marco Elver <elver@google.com>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
2021-12-09 16:42:26 -08:00
..
core.c kcsan: Add core memory barrier instrumentation functions 2021-12-09 16:42:26 -08:00
debugfs.c kcsan: use u64 instead of cycles_t 2021-07-30 17:09:02 +02:00
encoding.h kcsan: Add missing license and copyright headers 2021-03-08 14:27:43 -08:00
kcsan_test.c kcsan: Support reporting scoped read-write access type 2021-09-13 16:41:19 -07:00
kcsan.h kcsan: Add ability to pass instruction pointer of access to reporting 2021-09-13 16:41:19 -07:00
Makefile kcsan: Make test follow KUnit style recommendations 2021-03-08 14:27:43 -08:00
permissive.h kcsan: permissive: Ignore data-racy 1-bit value changes 2021-07-20 13:49:44 -07:00
report.c kcsan: Support reporting scoped read-write access type 2021-09-13 16:41:19 -07:00
selftest.c kcsan: selftest: Cleanup and add missing __init 2021-09-13 16:41:20 -07:00