Re: [PATCH 02/24] x86/traps: Move arch/x86/kernel/traps.c to arch/x86/entry/
flat view
From: Nick Desaulniers <ndesaulniers@google.com>
Date: 2021-09-02 17:05:47
Also in:
lkml
On Thu, Sep 2, 2021 at 6:36 AM Peter Zijlstra [off-list ref] wrote:
quoted hunk
On Thu, Sep 02, 2021 at 02:05:41PM +0200, Peter Zijlstra wrote:quoted
On Thu, Sep 02, 2021 at 07:54:25PM +0800, Lai Jiangshan wrote:quoted
For example, stack-protector is instrumenting many noninstr functions now if the CONFIG is yes. It is normally Ok and gcc is adding per-function control on it.IIRC the latest compiler have an attribute for this too, that really should be added to noinstr. Lemme go find.Something like so... Nick ?diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h index 49b0ac8b6fd3..6a15c3d8df5c 100644 --- a/include/linux/compiler-clang.h +++ b/include/linux/compiler-clang.h@@ -62,6 +62,12 @@ #define __no_sanitize_coverage #endif +#if defined(CONFIG_STACKPROTECTOR) +#define __no_stack_protector __attribute__((no_stack_protector)) +#else +#define __no_stack_protector +#endif + /* * Not all versions of clang implement the type-generic versions * of the builtin overflow checkers. Fortunately, clang implementsdiff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index cb9217fc60af..7ac0a3f11ba9 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h@@ -128,6 +128,12 @@ #define __no_sanitize_coverage #endif +#if defined(CONFIG_STACKPROTECTOR) && __has_attribute__(__no_stack_protector__) +#define __no_stack_protector __attribute__((no_stack_protector)) +#else +#define __no_stack_protector +#endif +
The above 2 hunks should go in include/linux/compiler_attributes.h, but yes. I'd been meaning to send such a patch; it's nice to have finer grain function-level control over -fno-stack-protector which significantly hurts ergonomics for things like LTO. IIRC GCC only added the attribute recently in the 10.X release, so it might be too new to rely on quite yet.
quoted hunk
#if GCC_VERSION >= 50100 #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1 #endifdiff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h index e4ea86fc584d..5ae1c08dba8d 100644 --- a/include/linux/compiler_types.h +++ b/include/linux/compiler_types.h@@ -210,7 +210,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 __no_sanitize_address __no_profile __no_sanitize_coverage + __no_kcsan __no_sanitize_address __no_profile __no_sanitize_coverage \ + __no_stack_protector #endif /* __KERNEL__ */
-- Thanks, ~Nick Desaulniers