mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
UPSTREAM: KVM: arm64: Handle PSCI resets before userspace touches vCPU state
The CPU_ON PSCI call takes a payload that KVM uses to configure a destination vCPU to run. This payload is non-architectural state and not exposed through any existing UAPI. Effectively, we have a race between CPU_ON and userspace saving/restoring a guest: if the target vCPU isn't ran again before the VMM saves its state, the requested PC and context ID are lost. When restored, the target vCPU will be runnable and start executing at its old PC. We can avoid this race by making sure the reset payload is serviced before userspace can access a vCPU's state. Fixes:358b28f09f("arm/arm64: KVM: Allow a VCPU to fully reset itself") Signed-off-by: Oliver Upton <oupton@google.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20210818202133.1106786-3-oupton@google.com (cherry picked from commit6826c6849b) Signed-off-by: Will Deacon <willdeacon@google.com> Bug: 198418208 Change-Id: Ic163ea6f91941a161913fa495e9a677d5e3589df
This commit is contained in:
committed by
Will Deacon
parent
c370383b49
commit
ec43869625
@@ -1214,6 +1214,14 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
|
||||
if (copy_from_user(®, argp, sizeof(reg)))
|
||||
break;
|
||||
|
||||
/*
|
||||
* We could owe a reset due to PSCI. Handle the pending reset
|
||||
* here to ensure userspace register accesses are ordered after
|
||||
* the reset.
|
||||
*/
|
||||
if (kvm_check_request(KVM_REQ_VCPU_RESET, vcpu))
|
||||
kvm_reset_vcpu(vcpu);
|
||||
|
||||
if (ioctl == KVM_SET_ONE_REG)
|
||||
r = kvm_arm_set_reg(vcpu, ®);
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user