diff options
Diffstat (limited to 'arch/x86/include/asm/nospec-branch.h')
| -rw-r--r-- | arch/x86/include/asm/nospec-branch.h | 17 | 
1 files changed, 13 insertions, 4 deletions
| diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h index fd2a8c1b88bc..80dc14422495 100644 --- a/arch/x86/include/asm/nospec-branch.h +++ b/arch/x86/include/asm/nospec-branch.h @@ -170,11 +170,15 @@   */  # define CALL_NOSPEC						\  	ANNOTATE_NOSPEC_ALTERNATIVE				\ -	ALTERNATIVE(						\ +	ALTERNATIVE_2(						\  	ANNOTATE_RETPOLINE_SAFE					\  	"call *%[thunk_target]\n",				\  	"call __x86_indirect_thunk_%V[thunk_target]\n",		\ -	X86_FEATURE_RETPOLINE) +	X86_FEATURE_RETPOLINE,					\ +	"lfence;\n"						\ +	ANNOTATE_RETPOLINE_SAFE					\ +	"call *%[thunk_target]\n",				\ +	X86_FEATURE_RETPOLINE_AMD)  # define THUNK_TARGET(addr) [thunk_target] "r" (addr)  #elif defined(CONFIG_X86_32) && defined(CONFIG_RETPOLINE) @@ -184,7 +188,8 @@   * here, anyway.   */  # define CALL_NOSPEC						\ -	ALTERNATIVE(						\ +	ANNOTATE_NOSPEC_ALTERNATIVE				\ +	ALTERNATIVE_2(						\  	ANNOTATE_RETPOLINE_SAFE					\  	"call *%[thunk_target]\n",				\  	"       jmp    904f;\n"					\ @@ -199,7 +204,11 @@  	"       ret;\n"						\  	"       .align 16\n"					\  	"904:	call   901b;\n",				\ -	X86_FEATURE_RETPOLINE) +	X86_FEATURE_RETPOLINE,					\ +	"lfence;\n"						\ +	ANNOTATE_RETPOLINE_SAFE					\ +	"call *%[thunk_target]\n",				\ +	X86_FEATURE_RETPOLINE_AMD)  # define THUNK_TARGET(addr) [thunk_target] "rm" (addr)  #else /* No retpoline for C / inline asm */ |