diff options
| author | Nam Cao <namcao@linutronix.de> | 2025-08-04 12:07:28 +0200 | 
|---|---|---|
| committer | Madhavan Srinivasan <maddy@linux.ibm.com> | 2025-09-01 13:39:40 +0530 | 
| commit | a39087905af9ffecaa237a918a2c03a04e479934 (patch) | |
| tree | cb6aae1b4902980a5c2a57856b82bb91a10a41f7 | |
| parent | 3443ff3be6e59b80d74036bb39f5b6409eb23cc9 (diff) | |
powerpc/powernv/pci: Fix underflow and leak issue
pnv_irq_domain_alloc() allocates interrupts at parent's interrupt
domain. If it fails in the progress, all allocated interrupts are
freed.
The number of successfully allocated interrupts so far is stored
"i". However, "i - 1" interrupts are freed. This is broken:
    - One interrupt is not be freed
    - If "i" is zero, "i - 1" wraps around
Correct the number of freed interrupts to "i".
Fixes: 0fcfe2247e75 ("powerpc/powernv/pci: Add MSI domains")
Signed-off-by: Nam Cao <namcao@linutronix.de>
Cc: stable@vger.kernel.org
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/70f8debe8688e0b467367db769b71c20146a836d.1754300646.git.namcao@linutronix.de
| -rw-r--r-- | arch/powerpc/platforms/powernv/pci-ioda.c | 2 | 
1 files changed, 1 insertions, 1 deletions
| diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index d8ccf2c9b98a..0166bf39ce1e 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c @@ -1854,7 +1854,7 @@ static int pnv_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,  	return 0;  out: -	irq_domain_free_irqs_parent(domain, virq, i - 1); +	irq_domain_free_irqs_parent(domain, virq, i);  	msi_bitmap_free_hwirqs(&phb->msi_bmp, hwirq, nr_irqs);  	return ret;  } | 
