Message ID | 20191018161033.261971-15-samitolvanen@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | add support for Clang's Shadow Call Stack | expand |
On Fri, 18 Oct 2019 at 18:11, 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. > You'll have to elaborate a bit here and explain that this is sufficient, given that we run EFI runtime services with interrupts enabled. > Signed-off-by: Sami Tolvanen <samitolvanen@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 >
On Sun, Oct 20, 2019 at 11:20 PM Ard Biesheuvel <ard.biesheuvel@linaro.org> wrote: > You'll have to elaborate a bit here and explain that this is > sufficient, given that we run EFI runtime services with interrupts > enabled. I can add a note about this in v2. This is called with preemption disabled and we have a separate interrupt shadow stack, so as far as I can tell, this should be sufficient. Did you have concerns about this? Sami
On Tue, 22 Oct 2019 at 00:40, Sami Tolvanen <samitolvanen@google.com> wrote: > > On Sun, Oct 20, 2019 at 11:20 PM Ard Biesheuvel > <ard.biesheuvel@linaro.org> wrote: > > You'll have to elaborate a bit here and explain that this is > > sufficient, given that we run EFI runtime services with interrupts > > enabled. > > I can add a note about this in v2. This is called with preemption > disabled and we have a separate interrupt shadow stack, so as far as I > can tell, this should be sufficient. Did you have concerns about this? > No concerns, but we should put the above clarification in the commit log.
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)
If we detect a corrupted x18 and SCS is enabled, restore the register before jumping back to instrumented code. Signed-off-by: Sami Tolvanen <samitolvanen@google.com> --- arch/arm64/kernel/efi-rt-wrapper.S | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)