lkml.org 
[lkml]   [2020]   [Apr]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH V3 9/9] x86/speculation: Annotate intra-function calls
    Date
    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
    \
     
     \ /
      Last update: 2020-04-14 12:36    [W:4.964 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site