Message ID | 20191105235608.107702-12-samitolvanen@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | add support for Clang's Shadow Call Stack | expand |
On Wed, Nov 6, 2019 at 12:56 AM Sami Tolvanen <samitolvanen@google.com> wrote: > > 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. In case you do v6: I think putting the explanation about why this is safe in the existing comment would be best given it is justifying a subtlety of the code rather than the change itself. Ard? Cheers, Miguel
On Wed, 6 Nov 2019 at 05:46, Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote: > > On Wed, Nov 6, 2019 at 12:56 AM Sami Tolvanen <samitolvanen@google.com> wrote: > > > > 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. > > In case you do v6: I think putting the explanation about why this is > safe in the existing comment would be best given it is justifying a > subtlety of the code rather than the change itself. Ard? > Agreed, but only if you have to respin for other reasons.
On Thu, Nov 7, 2019 at 2:51 AM Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > > On Wed, 6 Nov 2019 at 05:46, Miguel Ojeda > <miguel.ojeda.sandonis@gmail.com> wrote: > > > > On Wed, Nov 6, 2019 at 12:56 AM Sami Tolvanen <samitolvanen@google.com> wrote: > > > > > > 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. > > > > In case you do v6: I think putting the explanation about why this is > > safe in the existing comment would be best given it is justifying a > > subtlety of the code rather than the change itself. Ard? > > > > Agreed, but only if you have to respin for other reasons. Sure, sounds good to me. I'll update the comment if other changes are needed. Sami
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)