[PATCH v3 2/2] irqchip/imx-irqsteer: Validate IRQ count before creating domain
Fabio Estevam <[email protected]>
| Newsgroups | dev.linux.lists.imx,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Fabio Estevam <[email protected]> The IRQ count is validated after creating the IRQ domain. If it is invalid, probe returns without removing the domain, leaving its host data pointing at devm-managed memory that is freed on probe failure. Validate the count before allocating resources to avoid the leak and dangling pointer. Fixes: 28528fca4908 ("irqchip/imx-irqsteer: Add multi output interrupts support") Signed-off-by: Fabio Estevam <[email protected]> --- Changes since v2: - Newly introduced. drivers/irqchip/irq-imx-irqsteer.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irqsteer.c index 653e25115083..55aec60dee40 100644 --- a/drivers/irqchip/irq-imx-irqsteer.c +++ b/drivers/irqchip/irq-imx-irqsteer.c @@ -217,6 +217,8 @@ static int imx_irqsteer_probe(struct platform_device *pdev) */ data->irq_count = DIV_ROUND_UP(irqs_num, 64); data->reg_num = irqs_num / 32; + if (!data->irq_count || data->irq_count > CHAN_MAX_OUTPUT_INT) + return -EINVAL; if (IS_ENABLED(CONFIG_PM)) { data->saved_reg = devm_kzalloc(&pdev->dev, @@ -250,11 +252,6 @@ static int imx_irqsteer_probe(struct platform_device *pdev) } irq_domain_set_pm_device(data->domain, &pdev->dev); - if (!data->irq_count || data->irq_count > CHAN_MAX_OUTPUT_INT) { - ret = -EINVAL; - goto out; - } - for (i = 0; i < data->irq_count; i++) { data->irq[i] = irq_of_parse_and_map(np, i); if (!data->irq[i]) -- 2.43.0