Message ID | 20210601111238.1059-3-yuzenghui@huawei.com |
---|---|
State | Superseded |
Headers | show |
Series | KVM: arm64: Commit exception state on exit to userspace | expand |
On Tue, 01 Jun 2021 12:12:38 +0100, Zenghui Yu <yuzenghui@huawei.com> wrote: > > commit e3e880bb1518eb10a4b4bb4344ed614d6856f190 upstream. > > Commit 26778aaa134a ("KVM: arm64: Commit pending PC adjustemnts before > returning to userspace") fixed the PC updating issue by forcing an explicit > synchronisation of the exception state on vcpu exit to userspace. > > However, we forgot to take into account the case where immediate_exit is > set by userspace and KVM_RUN will exit immediately. Fix it by resolving all > pending PC updates before returning to userspace. > > Since __kvm_adjust_pc() relies on a loaded vcpu context, I moved the > immediate_exit checking right after vcpu_load(). We will get some overhead > if immediate_exit is true (which should hopefully be rare). > > Fixes: 26778aaa134a ("KVM: arm64: Commit pending PC adjustemnts before returning to userspace") > Signed-off-by: Zenghui Yu <yuzenghui@huawei.com> > Signed-off-by: Marc Zyngier <maz@kernel.org> > Link: https://lore.kernel.org/r/20210526141831.1662-1-yuzenghui@huawei.com > Cc: stable@vger.kernel.org # 5.11 Reviewed-by: Marc Zyngier <maz@kernel.org> M.
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index c18740a1e541..7730b81aad6d 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -715,11 +715,13 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) return ret; } - if (run->immediate_exit) - return -EINTR; - vcpu_load(vcpu); + if (run->immediate_exit) { + ret = -EINTR; + goto out; + } + kvm_sigset_activate(vcpu); ret = 1; @@ -892,6 +894,7 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) kvm_sigset_deactivate(vcpu); +out: /* * In the unlikely event that we are returning to userspace * with pending exceptions or PC adjustment, commit these