Commit 5021fd77 authored by Christoph Schlameuss's avatar Christoph Schlameuss Committed by Claudio Imbrenda
Browse files

KVM: s390: Reject KVM_SET_GSI_ROUTING on ucontrol VMs



Prevent null pointer dereference when processing
KVM_IRQ_ROUTING_S390_ADAPTER routing entries.
The ioctl cannot be processed for ucontrol VMs.

Fixes: f6547066 ("KVM: s390/interrupt: do not pin adapter interrupt pages")
Signed-off-by: default avatarChristoph Schlameuss <schlameuss@linux.ibm.com>
Tested-by: default avatarHariharan Mari <hari55@linux.ibm.com>
Reviewed-by: default avatarHariharan Mari <hari55@linux.ibm.com>
Reviewed-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
Link: https://lore.kernel.org/r/20241216092140.329196-4-schlameuss@linux.ibm.com


Message-ID: <20241216092140.329196-4-schlameuss@linux.ibm.com>
Signed-off-by: default avatarClaudio Imbrenda <imbrenda@linux.ibm.com>
parent b07f6a30
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1914,6 +1914,9 @@ No flags are specified so far, the corresponding field must be set to zero.
  #define KVM_IRQ_ROUTING_HV_SINT 4
  #define KVM_IRQ_ROUTING_XEN_EVTCHN 5

On s390, adding a KVM_IRQ_ROUTING_S390_ADAPTER is rejected on ucontrol VMs with
error -EINVAL.

flags:

- KVM_MSI_VALID_DEVID: used along with KVM_IRQ_ROUTING_MSI routing entry
+2 −0
Original line number Diff line number Diff line
@@ -2898,6 +2898,8 @@ int kvm_set_routing_entry(struct kvm *kvm,
	switch (ue->type) {
	/* we store the userspace addresses instead of the guest addresses */
	case KVM_IRQ_ROUTING_S390_ADAPTER:
		if (kvm_is_ucontrol(kvm))
			return -EINVAL;
		e->set = set_adapter_int;
		uaddr =  gmap_translate(kvm->arch.gmap, ue->u.adapter.summary_addr);
		if (uaddr == -EFAULT)