Re: [PATCH v3 2/2] irqchip/imx-irqsteer: Validate IRQ count before creating domain
Frank Li <[email protected]>
| Newsgroups | dev.linux.lists.imx,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <anOfJgCDtezzSrJH@SMW015318> |
On Wed, Aug 05, 2026 at 04:27:43PM -0300, Fabio Estevam wrote: > 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]> > --- Reviewed-by: Frank Li <[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 > >