KVM: arm64: Fully zero the vcpu state on reset
authorMarc Zyngier <maz@kernel.org>
Wed, 7 Apr 2021 17:54:16 +0000 (18:54 +0100)
committerMarc Zyngier <maz@kernel.org>
Fri, 9 Apr 2021 17:26:25 +0000 (18:26 +0100)
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>
arch/arm64/kvm/reset.c

index bd354cd45d2860e4595109c3375395f716f6c911..4b5acd84b8c879edee1199ce0f893ef73a9f5ea2 100644 (file)
@@ -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 */