| From 85d703746154cdc6794b6654b587b0b0354c97e9 Mon Sep 17 00:00:00 2001 |
| From: Marc Zyngier <maz@kernel.org> |
| Date: Wed, 7 Apr 2021 18:54:16 +0100 |
| Subject: KVM: arm64: Fully zero the vcpu state on reset |
| |
| From: Marc Zyngier <maz@kernel.org> |
| |
| commit 85d703746154cdc6794b6654b587b0b0354c97e9 upstream. |
| |
| On vcpu reset, we expect all the registers to be brought back |
| to their initial state, which happens to be a bunch of zeroes. |
| |
| However, some recent commit broke this, and is now leaving a bunch |
| of registers (such as the FP state) with whatever was left by the |
| guest. My bad. |
| |
| Zero the reset of the state (32bit SPSRs and FPSIMD state). |
| |
| Cc: stable@vger.kernel.org |
| Fixes: e47c2055c68e ("KVM: arm64: Make struct kvm_regs userspace-only") |
| Signed-off-by: Marc Zyngier <maz@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/arm64/kvm/reset.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/arch/arm64/kvm/reset.c |
| +++ b/arch/arm64/kvm/reset.c |
| @@ -242,6 +242,11 @@ int kvm_reset_vcpu(struct kvm_vcpu *vcpu |
| |
| /* Reset core registers */ |
| memset(vcpu_gp_regs(vcpu), 0, sizeof(*vcpu_gp_regs(vcpu))); |
| + memset(&vcpu->arch.ctxt.fp_regs, 0, sizeof(vcpu->arch.ctxt.fp_regs)); |
| + vcpu->arch.ctxt.spsr_abt = 0; |
| + vcpu->arch.ctxt.spsr_und = 0; |
| + vcpu->arch.ctxt.spsr_irq = 0; |
| + vcpu->arch.ctxt.spsr_fiq = 0; |
| vcpu_gp_regs(vcpu)->pstate = pstate; |
| |
| /* Reset system registers */ |