lkml.org 
[lkml]   [2020]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v11 07/12] arm64: efi: restore x18 if it was corrupted
    From
    If we detect a corrupted x18, restore the register before jumping back
    to potentially SCS instrumented code. This is safe, because the wrapper
    is called with preemption disabled and a separate shadow stack is used
    for interrupt handling.

    Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Acked-by: Will Deacon <will@kernel.org>
    ---
    arch/arm64/kernel/efi-rt-wrapper.S | 11 ++++++++++-
    1 file changed, 10 insertions(+), 1 deletion(-)

    diff --git a/arch/arm64/kernel/efi-rt-wrapper.S b/arch/arm64/kernel/efi-rt-wrapper.S
    index 3fc71106cb2b..6ca6c0dc11a1 100644
    --- a/arch/arm64/kernel/efi-rt-wrapper.S
    +++ b/arch/arm64/kernel/efi-rt-wrapper.S
    @@ -34,5 +34,14 @@ ENTRY(__efi_rt_asm_wrapper)
    ldp x29, x30, [sp], #32
    b.ne 0f
    ret
    -0: b efi_handle_corrupted_x18 // tail call
    +0:
    + /*
    + * With CONFIG_SHADOW_CALL_STACK, the kernel uses x18 to store a
    + * shadow stack pointer, which we need to restore before returning to
    + * potentially instrumented code. This is safe because the wrapper is
    + * called with preemption disabled and a separate shadow stack is used
    + * for interrupts.
    + */
    + mov x18, x2
    + b efi_handle_corrupted_x18 // tail call
    ENDPROC(__efi_rt_asm_wrapper)
    --
    2.26.1.301.g55bc3eb7cb9-goog
    \
     
     \ /
      Last update: 2020-04-16 18:41    [W:4.115 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site