From: David Woodhouse Date: Fri, 23 Feb 2018 10:42:11 +0000 (+0100) Subject: x86/retpoline: Avoid retpolines for built-in __init functions X-Git-Tag: v4.1.50~44 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=686f71029ec23c50e030d6c5c9ea838d3a4e83ce;p=users%2Fdwmw2%2Flinux.git x86/retpoline: Avoid retpolines for built-in __init functions [ Upstream commit 66f793099a636862a71c59d4a6ba91387b155e0c ] There's no point in building init code with retpolines, since it runs before any potentially hostile userspace does. And before the retpoline is actually ALTERNATIVEd into place, for much of it. Signed-off-by: David Woodhouse Signed-off-by: Thomas Gleixner Cc: karahmed@amazon.de Cc: peterz@infradead.org Cc: bp@alien8.de Link: https://lkml.kernel.org/r/1517484441-1420-2-git-send-email-dwmw@amazon.co.uk Signed-off-by: Sasha Levin --- diff --git a/include/linux/init.h b/include/linux/init.h index 21b6d768edd7a..5f4d931095ce9 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -4,6 +4,13 @@ #include #include +/* Built-in __init functions needn't be compiled with retpoline */ +#if defined(RETPOLINE) && !defined(MODULE) +#define __noretpoline __attribute__((indirect_branch("keep"))) +#else +#define __noretpoline +#endif + /* These macros are used to mark some functions or * initialized data (doesn't apply to uninitialized data) * as `initialization' functions. The kernel can take this @@ -39,7 +46,7 @@ /* These are for everybody (although not all archs will actually discard it in modules) */ -#define __init __section(.init.text) __cold notrace +#define __init __section(.init.text) __cold notrace __noretpoline #define __initdata __section(.init.data) #define __initconst __constsection(.init.rodata) #define __exitdata __section(.exit.data)