KVM: s390: Fix KVM_S390_VCPU_FAULT ioctl
A previous commit changed the behaviour of the KVM_S390_VCPU_FAULT
ioctl. The current (wrong) implementation will trigger a guest
addressing exception if the requested address lies outside of a
memslot, unless the VM is UCONTROL.
Restore the previous behaviour by open coding the fault-in logic.
Fixes: 3762e905ec ("KVM: s390: use __kvm_faultin_pfn()")
Acked-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Reviewed-by: Steffen Eiden <seiden@linux.ibm.com>
Signed-off-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
This commit is contained in:
parent
a12cc7e3d6
commit
0a28e06575
|
|
@ -5520,9 +5520,21 @@ long kvm_arch_vcpu_ioctl(struct file *filp,
|
|||
}
|
||||
#endif
|
||||
case KVM_S390_VCPU_FAULT: {
|
||||
idx = srcu_read_lock(&vcpu->kvm->srcu);
|
||||
r = vcpu_dat_fault_handler(vcpu, arg, 0);
|
||||
srcu_read_unlock(&vcpu->kvm->srcu, idx);
|
||||
gpa_t gaddr = arg;
|
||||
|
||||
scoped_guard(srcu, &vcpu->kvm->srcu) {
|
||||
r = vcpu_ucontrol_translate(vcpu, &gaddr);
|
||||
if (r)
|
||||
break;
|
||||
|
||||
r = kvm_s390_faultin_gfn_simple(vcpu, NULL, gpa_to_gfn(gaddr), false);
|
||||
if (r == PGM_ADDRESSING)
|
||||
r = -EFAULT;
|
||||
if (r <= 0)
|
||||
break;
|
||||
r = -EIO;
|
||||
KVM_BUG_ON(r, vcpu->kvm);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case KVM_ENABLE_CAP:
|
||||
|
|
|
|||
Loading…
Reference in New Issue