Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

arm64: kvm: report original PAR_EL1 upon panic

If we call __kvm_hyp_panic while a guest context is active, we call
__restore_sysregs before acquiring the system register values for the
panic, in the process throwing away the PAR_EL1 value at the point of
the panic.

This patch modifies __kvm_hyp_panic to stash the PAR_EL1 value prior to
restoring host register values, enabling us to report the original
values at the point of the panic.

Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>

authored by

Mark Rutland and committed by
Christoffer Dall
fbb4574c 1d7a4e31

+5 -1
+5 -1
arch/arm64/kvm/hyp.S
··· 864 864 ENDPROC(__kvm_flush_vm_context) 865 865 866 866 __kvm_hyp_panic: 867 + // Stash PAR_EL1 before corrupting it in __restore_sysregs 868 + mrs x0, par_el1 869 + push x0, xzr 870 + 867 871 // Guess the context by looking at VTTBR: 868 872 // If zero, then we're already a host. 869 873 // Otherwise restore a minimal host context before panicing. ··· 902 898 mrs x3, esr_el2 903 899 mrs x4, far_el2 904 900 mrs x5, hpfar_el2 905 - mrs x6, par_el1 901 + pop x6, xzr // active context PAR_EL1 906 902 mrs x7, tpidr_el2 907 903 908 904 mov lr, #(PSR_F_BIT | PSR_I_BIT | PSR_A_BIT | PSR_D_BIT |\