arm64: KVM: Prevent speculative S1 PTW when restoring vcpu context
authorMarc Zyngier <maz@kernel.org>
Tue, 30 Jul 2019 10:15:31 +0000 (11:15 +0100)
committerMarc Zyngier <maz@kernel.org>
Sat, 26 Oct 2019 09:44:49 +0000 (10:44 +0100)
commitbd227553ad5077f21ddb382dcd910ba46181805a
tree0dea72dba7f8330cb9b9d40f2b33a9bd56278d1b
parent37553941c670c3ad160b25843e6cdcbee2b3c6eb
arm64: KVM: Prevent speculative S1 PTW when restoring vcpu context

When handling erratum 1319367, we must ensure that the page table
walker cannot parse the S1 page tables while the guest is in an
inconsistent state. This is done as follows:

On guest entry:
- TCR_EL1.EPD{0,1} are set, ensuring that no PTW can occur
- all system registers are restored, except for TCR_EL1 and SCTLR_EL1
- stage-2 is restored
- SCTLR_EL1 and TCR_EL1 are restored

On guest exit:
- SCTLR_EL1.M and TCR_EL1.EPD{0,1} are set, ensuring that no PTW can occur
- stage-2 is disabled
- All host system registers are restored

Reviewed-by: James Morse <james.morse@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/hyp/switch.c
arch/arm64/kvm/hyp/sysreg-sr.c