If we detect a corrupted x18 and SCS is enabled, restore the register
before jumping back to instrumented code.

Signed-off-by: Sami Tolvanen <samitolva...@google.com>
---
 arch/arm64/kernel/efi-rt-wrapper.S | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/kernel/efi-rt-wrapper.S 
b/arch/arm64/kernel/efi-rt-wrapper.S
index 3fc71106cb2b..945744f16086 100644
--- a/arch/arm64/kernel/efi-rt-wrapper.S
+++ b/arch/arm64/kernel/efi-rt-wrapper.S
@@ -34,5 +34,10 @@ 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. */
+       mov     x18, x2
+#endif
+       b       efi_handle_corrupted_x18        // tail call
 ENDPROC(__efi_rt_asm_wrapper)
-- 
2.23.0.866.gb869b98d4c-goog

Reply via email to