Skip to content

Commit 971d452

Browse files
Koichiro Dengregkh
authored andcommitted
NTB: epf: Fix request_irq() unwind in ntb_epf_init_isr()
commit fcba26e upstream. ntb_epf_init_isr() requests multiple MSI/MSI-X vectors in a loop. If request_irq() fails part-way through, it jumps straight to pci_free_irq_vectors() without freeing already requested IRQs. Fix the error path by freeing any successfully requested IRQs before releasing the vectors. Fixes: 812ce2f ("NTB: Add support for EPF PCI Non-Transparent Bridge") Signed-off-by: Koichiro Den <den@valinux.co.jp> Signed-off-by: Manivannan Sadhasivam <mani@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Cc: stable@vger.kernel.org # v5.12+ Link: https://patch.msgid.link/20260304083028.1391068-2-den@valinux.co.jp Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent cf85180 commit 971d452

1 file changed

Lines changed: 4 additions & 6 deletions

File tree

drivers/ntb/hw/epf/ntb_hw_epf.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ static int ntb_epf_init_isr(struct ntb_epf_dev *ndev, int msi_min, int msi_max)
357357
0, "ntb_epf", ndev);
358358
if (ret) {
359359
dev_err(dev, "Failed to request irq\n");
360-
goto err_request_irq;
360+
goto err_free_irq;
361361
}
362362
}
363363

@@ -367,16 +367,14 @@ static int ntb_epf_init_isr(struct ntb_epf_dev *ndev, int msi_min, int msi_max)
367367
argument | irq);
368368
if (ret) {
369369
dev_err(dev, "Failed to configure doorbell\n");
370-
goto err_configure_db;
370+
goto err_free_irq;
371371
}
372372

373373
return 0;
374374

375-
err_configure_db:
376-
for (i = 0; i < ndev->db_count + 1; i++)
375+
err_free_irq:
376+
while (i--)
377377
free_irq(pci_irq_vector(pdev, i), ndev);
378-
379-
err_request_irq:
380378
pci_free_irq_vectors(pdev);
381379

382380
return ret;

0 commit comments

Comments
 (0)