Commit e75a6795 authored by Marco Elver's avatar Marco Elver Committed by Paul E. McKenney
Browse files

locking/atomics, kcsan: Add KCSAN instrumentation



This adds KCSAN instrumentation to atomic-instrumented.h.

Signed-off-by: default avatarMarco Elver <elver@google.com>
Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
Acked-by: default avatarPaul E. McKenney <paulmck@kernel.org>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent bf07132f
Loading
Loading
Loading
Loading
+203 −190

File changed.

Preview size limit exceeded, changes collapsed.

+15 −2
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ gen_param_check()
	# We don't write to constant parameters
	[ ${type#c} != ${type} ] && rw="read"

	printf "\tkasan_check_${rw}(${name}, sizeof(*${name}));\n"
	printf "\t__atomic_check_${rw}(${name}, sizeof(*${name}));\n"
}

#gen_param_check(arg...)
@@ -107,7 +107,7 @@ cat <<EOF
#define ${xchg}(ptr, ...)						\\
({									\\
	typeof(ptr) __ai_ptr = (ptr);					\\
	kasan_check_write(__ai_ptr, ${mult}sizeof(*__ai_ptr));		\\
	__atomic_check_write(__ai_ptr, ${mult}sizeof(*__ai_ptr));		\\
	arch_${xchg}(__ai_ptr, __VA_ARGS__);				\\
})
EOF
@@ -148,6 +148,19 @@ cat << EOF

#include <linux/build_bug.h>
#include <linux/kasan-checks.h>
#include <linux/kcsan-checks.h>

static inline void __atomic_check_read(const volatile void *v, size_t size)
{
	kasan_check_read(v, size);
	kcsan_check_atomic_read(v, size);
}

static inline void __atomic_check_write(const volatile void *v, size_t size)
{
	kasan_check_write(v, size);
	kcsan_check_atomic_write(v, size);
}

EOF