compiler_types.h: Add __no_sanitize_{address,undefined} to noinstr
Adds the portable definitions for __no_sanitize_address, and __no_sanitize_undefined, and subsequently changes noinstr to use the attributes to disable instrumentation via KASAN or UBSAN. Reported-by: syzbot+dc1fa714cb070b184db5@syzkaller.appspotmail.com Signed-off-by: Marco Elver <elver@google.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> Link: https://lore.kernel.org/lkml/000000000000d2474c05a6c938fe@google.com/
This commit is contained in:
parent
7b861a53e4
commit
5144f8a8df
@ -33,6 +33,14 @@
|
||||
#define __no_sanitize_thread
|
||||
#endif
|
||||
|
||||
#if __has_feature(undefined_behavior_sanitizer)
|
||||
/* GCC does not have __SANITIZE_UNDEFINED__ */
|
||||
#define __no_sanitize_undefined \
|
||||
__attribute__((no_sanitize("undefined")))
|
||||
#else
|
||||
#define __no_sanitize_undefined
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Not all versions of clang implement the the type-generic versions
|
||||
* of the builtin overflow checkers. Fortunately, clang implements
|
||||
|
@ -150,6 +150,12 @@
|
||||
#define __no_sanitize_thread
|
||||
#endif
|
||||
|
||||
#if __has_attribute(__no_sanitize_undefined__)
|
||||
#define __no_sanitize_undefined __attribute__((no_sanitize_undefined))
|
||||
#else
|
||||
#define __no_sanitize_undefined
|
||||
#endif
|
||||
|
||||
#if GCC_VERSION >= 50100
|
||||
#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
|
||||
#endif
|
||||
|
@ -198,7 +198,8 @@ struct ftrace_likely_data {
|
||||
|
||||
/* Section for code which can't be instrumented at all */
|
||||
#define noinstr \
|
||||
noinline notrace __attribute((__section__(".noinstr.text"))) __no_kcsan
|
||||
noinline notrace __attribute((__section__(".noinstr.text"))) \
|
||||
__no_kcsan __no_sanitize_address __no_sanitize_undefined
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user