]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: s390: pci: Reject adapter interrupt forwarding if already enabled
authorFarhan Ali <alifm@linux.ibm.com>
Thu, 23 Jul 2026 22:14:04 +0000 (15:14 -0700)
committerChristian Borntraeger <borntraeger@linux.ibm.com>
Fri, 24 Jul 2026 09:26:53 +0000 (11:26 +0200)
The MPCIFC instruction doesn't allow registering adapter interrupts without
first unregistering. So reject any request to enable interrupt forwarding
if its already enabled for the zPCI device. This also fixes overwriting and
thus leaking resources when the ioctl is called multiple times for the same
device.

Fixes: 3c5a1b6f0a18 ("KVM: s390: pci: provide routines for enabling/disabling interrupt forwarding")
Cc: stable@vger.kernel.org
Reviewed-by: Christian Borntraeger <borntraeger@linux.ibm.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.ibm.com>
Tested-by: Matthew Rosato <mjrosato@linux.ibm.com>
Signed-off-by: Christian Borntraeger <borntraeger@linux.ibm.com>
arch/s390/kvm/pci.c

index 720bb58cabe2e90efba75c361534e77e01b37c5b..d2a11cdf6941de6f76a4e670464794df6a806527 100644 (file)
@@ -237,6 +237,10 @@ static int kvm_s390_pci_aif_enable(struct zpci_dev *zdev, struct zpci_fib *fib,
        if (zdev->gisa == 0)
                return -EINVAL;
 
+       /* AIF already enabled for the device */
+       if (zdev->kzdev->fib.fmt0.aibv != 0)
+               return -EINVAL;
+
        kvm = zdev->kzdev->kvm;
        msi_vecs = min_t(unsigned int, fib->fmt0.noi, zdev->max_msi);