Message ID | 20180615214715.92957-2-kettenis@openbsd.org |
---|---|
State | Accepted |
Delegated to: | Alexander Graf |
Headers | show |
Series | efi_loader: ARM: add support for ARMV7_NONSEC=y | expand |
> The current code that switches into HYP mode doesn't bother to set > up a stack for HYP mode. This doesn't work for EFI applications > as they expect a usable stack. Fix this by migrating the stack > pointer from SP_svc to SP_hyp while in Monitor mode. > This restores the stack pointer when we drop into HYP mode. > > Signed-off-by: Mark Kettenis <kettenis@openbsd.org> Thanks, applied to efi-next Alex
diff --git a/arch/arm/cpu/armv7/nonsec_virt.S b/arch/arm/cpu/armv7/nonsec_virt.S index 56bdba1d38..1773fae205 100644 --- a/arch/arm/cpu/armv7/nonsec_virt.S +++ b/arch/arm/cpu/armv7/nonsec_virt.S @@ -80,6 +80,8 @@ _secure_monitor: #ifdef CONFIG_ARMV7_VIRT orreq r5, r5, #0x100 @ allow HVC instruction moveq r6, #HYP_MODE @ Enter the kernel as HYP + mrseq r3, sp_svc + msreq sp_hyp, r3 @ migrate SP #endif mcr p15, 0, r5, c1, c1, 0 @ write SCR (with NS bit set)
The current code that switches into HYP mode doesn't bother to set up a stack for HYP mode. This doesn't work for EFI applications as they expect a usable stack. Fix this by migrating the stack pointer from SP_svc to SP_hyp while in Monitor mode. This restores the stack pointer when we drop into HYP mode. Signed-off-by: Mark Kettenis <kettenis@openbsd.org> --- arch/arm/cpu/armv7/nonsec_virt.S | 2 ++ 1 file changed, 2 insertions(+)