]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
irqchip/riscv-intc: Prevent memory leak when riscv_intc_init_common() fails
authorSunil V L <sunilvl@ventanamicro.com>
Mon, 27 May 2024 08:11:13 +0000 (13:41 +0530)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 3 Jun 2024 10:29:35 +0000 (12:29 +0200)
When riscv_intc_init_common() fails, the firmware node allocated is not
freed. Add the missing free().

Fixes: 7023b9d83f03 ("irqchip/riscv-intc: Add ACPI support")
Signed-off-by: Sunil V L <sunilvl@ventanamicro.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Anup Patel <anup@brainfault.org>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20240527081113.616189-1-sunilvl@ventanamicro.com
drivers/irqchip/irq-riscv-intc.c

index 9e71c442881412d7eb40bde0cc0e139a41093ff8..4f3a12383a1e4111788baf798cacd3b9accb71eb 100644 (file)
@@ -253,8 +253,9 @@ IRQCHIP_DECLARE(andes, "andestech,cpu-intc", riscv_intc_init);
 static int __init riscv_intc_acpi_init(union acpi_subtable_headers *header,
                                       const unsigned long end)
 {
-       struct fwnode_handle *fn;
        struct acpi_madt_rintc *rintc;
+       struct fwnode_handle *fn;
+       int rc;
 
        rintc = (struct acpi_madt_rintc *)header;
 
@@ -273,7 +274,11 @@ static int __init riscv_intc_acpi_init(union acpi_subtable_headers *header,
                return -ENOMEM;
        }
 
-       return riscv_intc_init_common(fn, &riscv_intc_chip);
+       rc = riscv_intc_init_common(fn, &riscv_intc_chip);
+       if (rc)
+               irq_domain_free_fwnode(fn);
+
+       return rc;
 }
 
 IRQCHIP_ACPI_DECLARE(riscv_intc, ACPI_MADT_TYPE_RINTC, NULL,