Messages in this thread Patch in this message | | | From | Alexandre Chartre <> | Subject | [PATCH V3 9/9] x86/speculation: Annotate intra-function calls | Date | Tue, 14 Apr 2020 12:36:18 +0200 |
| |
Some speculative execution mitigations (like retpoline) use intra- function calls. Provide a macro to annotate such intra-function calls so they can be properly handled by objtool, and use this macro to annotate intra-function calls.
Signed-off-by: Alexandre Chartre <alexandre.chartre@oracle.com> --- arch/x86/include/asm/nospec-branch.h | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h index 20594ea99c21..89ae2f9cc873 100644 --- a/arch/x86/include/asm/nospec-branch.h +++ b/arch/x86/include/asm/nospec-branch.h @@ -3,6 +3,7 @@ #ifndef _ASM_X86_NOSPEC_BRANCH_H_ #define _ASM_X86_NOSPEC_BRANCH_H_ +#include <linux/frame.h> #include <linux/static_key.h> #include <asm/alternative.h> @@ -20,6 +21,15 @@ #define ANNOTATE_NOSPEC_ALTERNATIVE \ ANNOTATE_IGNORE_ALTERNATIVE +/* + * Intra-function call instruction. This should be used as a substitute + * for the call instruction when doing an intra-function call. It is + * similar to the call instruction but it tells objtool that this is + * an intra-function call. + */ +#define INTRA_FUNCTION_CALL \ + ANNOTATE_INTRA_FUNCTION_CALL call + /* * Fill the CPU return stack buffer. * @@ -47,13 +57,13 @@ #define __FILL_RETURN_BUFFER_BEGIN(reg, nr, sp) \ mov $(nr/2), reg; \ 771: \ - call 772f; \ + INTRA_FUNCTION_CALL 772f; \ 773: /* speculation trap */ \ pause; \ lfence; \ jmp 773b; \ 772: \ - call 774f; \ + INTRA_FUNCTION_CALL 774f; \ 775: /* speculation trap */ \ pause; \ lfence; \ @@ -90,7 +100,7 @@ * invocation below less ugly. */ .macro RETPOLINE_JMP reg:req - call .Ldo_rop_\@ + INTRA_FUNCTION_CALL .Ldo_rop_\@ .Lspec_trap_\@: pause lfence @@ -110,7 +120,7 @@ .Ldo_retpoline_jmp_\@: RETPOLINE_JMP \reg .Ldo_call_\@: - call .Ldo_retpoline_jmp_\@ + INTRA_FUNCTION_CALL .Ldo_retpoline_jmp_\@ .endm /* -- 2.18.2
| |