Messages in this thread | | | From | Andrey Konovalov <> | Date | Wed, 3 Jun 2020 15:35:36 +0200 | Subject | Re: [PATCH -tip 2/2] compiler_types.h: Add __no_sanitize_{address,undefined} to noinstr |
| |
On Tue, Jun 2, 2020 at 8:44 PM Marco Elver <elver@google.com> wrote: > > 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. > > Link: https://lore.kernel.org/lkml/000000000000d2474c05a6c938fe@google.com/ > Reported-by: syzbot+dc1fa714cb070b184db5@syzkaller.appspotmail.com > Signed-off-by: Marco Elver <elver@google.com>
Acked-by: Andrey Konovalov <andreyknvl@google.com>
> --- > > Note: __no_sanitize_coverage (for KCOV) isn't possible right now, > because neither GCC nor Clang support such an attribute. This means > going and changing the compilers again (for Clang it's fine, for GCC, > it'll take a while). > > However, it looks like that KCOV_INSTRUMENT := n is currently in all the > right places. Short-term, this should be reasonable. > --- > include/linux/compiler-clang.h | 8 ++++++++ > include/linux/compiler-gcc.h | 6 ++++++ > include/linux/compiler_types.h | 3 ++- > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h > index 2cb42d8bdedc..c0e4b193b311 100644 > --- a/include/linux/compiler-clang.h > +++ b/include/linux/compiler-clang.h > @@ -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 > diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h > index 7dd4e0349ef3..1c74464c80c6 100644 > --- a/include/linux/compiler-gcc.h > +++ b/include/linux/compiler-gcc.h > @@ -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 > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h > index 02becd21d456..89b8c1ae18a1 100644 > --- a/include/linux/compiler_types.h > +++ b/include/linux/compiler_types.h > @@ -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__ */ > > -- > 2.27.0.rc2.251.g90737beb825-goog >
| |