]> www.infradead.org Git - users/hch/misc.git/commitdiff
powerpc/pseries/msi: Fix potential underflow and leak issue
authorNam Cao <namcao@linutronix.de>
Mon, 4 Aug 2025 10:07:27 +0000 (12:07 +0200)
committerMadhavan Srinivasan <maddy@linux.ibm.com>
Mon, 1 Sep 2025 08:09:39 +0000 (13:39 +0530)
pseries_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: a5f3d2c17b07 ("powerpc/pseries/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/a980067f2b256bf716b4cd713bc1095966eed8cd.1754300646.git.namcao@linutronix.de
arch/powerpc/platforms/pseries/msi.c

index ee1c8c6898a3c74d67cc4bc32f83fc14b57935c8..9dc294de631f1d617be18e66f165e69c07943d0a 100644 (file)
@@ -593,7 +593,7 @@ static int pseries_irq_domain_alloc(struct irq_domain *domain, unsigned int virq
 
 out:
        /* TODO: handle RTAS cleanup in ->msi_finish() ? */
-       irq_domain_free_irqs_parent(domain, virq, i - 1);
+       irq_domain_free_irqs_parent(domain, virq, i);
        return ret;
 }