FROMLIST: arm64: efi: restore x18 if it was corrupted
If we detect a corrupted x18 and SCS is enabled, restore the register before jumping back to instrumented code. This is safe, because the wrapper is called with preemption disabled and a separate shadow stack is used for interrupt handling. Bug: 145210207 Change-Id: Idb75117e38c895231a14f5573261861e722c1264 (am from https://lore.kernel.org/patchwork/patch/1149060/) Reviewed-by: Kees Cook <keescook@chromium.org> Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
This commit is contained in:
parent
ee3f10f584
commit
0db85aae47
1 changed files with 10 additions and 1 deletions
|
|
@ -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:
|
||||
#ifdef CONFIG_SHADOW_CALL_STACK
|
||||
/*
|
||||
* Restore x18 before returning to 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
|
||||
#endif
|
||||
b efi_handle_corrupted_x18 // tail call
|
||||
ENDPROC(__efi_rt_asm_wrapper)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue