Message ID | 20220601041259.56185-1-linmq006@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | bf038503d5fe90189743124233fe7aeb0984e961 |
Delegated to: | Bjorn Helgaas |
Headers | show |
Series | [v3] PCI: mediatek-gen3: Fix refcount leak in mtk_pcie_init_irq_domains | expand |
Hi Miaoqian, >of_get_child_by_name() returns a node pointer with refcount >incremented, we should use of_node_put() on it when not need anymore. >Add missing of_node_put() to avoid refcount leak. > >Fixes: 814cceebba9b ("PCI: mediatek-gen3: Add INTx support") >Signed-off-by: Miaoqian Lin <linmq006@gmail.com> Thanks for scanning the refcont leak and submitting this! Reviewed-by: Miles Chen <miles.chen@mediatek.com> >--- >changes in v2: >- move of_node_put(intc_node) right after irq_domain_add_linear to cover >normal path and error paths. >--- >changes in v3: >- call of_node_put() in error paths with goto, and call of_node_put() before > return 0 in normal path. Since this function has a goto part to handle > resources, so put them together, as suggested by Miles Chen <miles.chen@mediatek.com> > >v1 link: https://lore.kernel.org/all/20220526110246.53502-1-linmq006@gmail.com/ >v2 link: https://lore.kernel.org/all/20220530064807.34534-1-linmq006@gmail.com/
On Wed, Jun 01, 2022 at 08:12:58AM +0400, Miaoqian Lin wrote: > of_get_child_by_name() returns a node pointer with refcount > incremented, we should use of_node_put() on it when not need anymore. > Add missing of_node_put() to avoid refcount leak. > > Fixes: 814cceebba9b ("PCI: mediatek-gen3: Add INTx support") > Signed-off-by: Miaoqian Lin <linmq006@gmail.com> Can we get an ack from Ryder or Jianjun, as well, since they're listed as maintainers? > --- > changes in v2: > - move of_node_put(intc_node) right after irq_domain_add_linear to cover > normal path and error paths. > --- > changes in v3: > - call of_node_put() in error paths with goto, and call of_node_put() before > return 0 in normal path. Since this function has a goto part to handle > resources, so put them together, as suggested by Miles Chen <miles.chen@mediatek.com> > > v1 link: https://lore.kernel.org/all/20220526110246.53502-1-linmq006@gmail.com/ > v2 link: https://lore.kernel.org/all/20220530064807.34534-1-linmq006@gmail.com/ > --- > drivers/pci/controller/pcie-mediatek-gen3.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c > index 3e8d70bfabc6..bceed28446ed 100644 > --- a/drivers/pci/controller/pcie-mediatek-gen3.c > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c > @@ -600,7 +600,8 @@ static int mtk_pcie_init_irq_domains(struct mtk_gen3_pcie *pcie) > &intx_domain_ops, pcie); > if (!pcie->intx_domain) { > dev_err(dev, "failed to create INTx IRQ domain\n"); > - return -ENODEV; > + ret = -ENODEV; > + goto out_put_node; > } > > /* Setup MSI */ > @@ -623,13 +624,15 @@ static int mtk_pcie_init_irq_domains(struct mtk_gen3_pcie *pcie) > goto err_msi_domain; > } > > + of_node_put(intc_node); > return 0; > > err_msi_domain: > irq_domain_remove(pcie->msi_bottom_domain); > err_msi_bottom_domain: > irq_domain_remove(pcie->intx_domain); > - > +out_put_node: > + of_node_put(intc_node); > return ret; > } > > -- > 2.25.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Hi Bjorn, On Wed, 2022-06-08 at 16:20 -0500, Bjorn Helgaas wrote: > On Wed, Jun 01, 2022 at 08:12:58AM +0400, Miaoqian Lin wrote: > > of_get_child_by_name() returns a node pointer with refcount > > incremented, we should use of_node_put() on it when not need > > anymore. > > Add missing of_node_put() to avoid refcount leak. > > > > Fixes: 814cceebba9b ("PCI: mediatek-gen3: Add INTx support") > > Signed-off-by: Miaoqian Lin <linmq006@gmail.com> > > Can we get an ack from Ryder or Jianjun, as well, since they're > listed > as maintainers? Sure, thanks for the reminder. Acked-by: Jianjun Wang <jianjun.wang@mediatek.com> > > > --- > > changes in v2: > > - move of_node_put(intc_node) right after irq_domain_add_linear to > > cover > > normal path and error paths. > > --- > > changes in v3: > > - call of_node_put() in error paths with goto, and call > > of_node_put() before > > return 0 in normal path. Since this function has a goto part to > > handle > > resources, so put them together, as suggested by Miles Chen < > > miles.chen@mediatek.com> > > > > v1 link: > > https://lore.kernel.org/all/20220526110246.53502-1-linmq006@gmail.com/ > > v2 link: > > https://lore.kernel.org/all/20220530064807.34534-1-linmq006@gmail.com/ > > --- > > drivers/pci/controller/pcie-mediatek-gen3.c | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c > > b/drivers/pci/controller/pcie-mediatek-gen3.c > > index 3e8d70bfabc6..bceed28446ed 100644 > > --- a/drivers/pci/controller/pcie-mediatek-gen3.c > > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c > > @@ -600,7 +600,8 @@ static int mtk_pcie_init_irq_domains(struct > > mtk_gen3_pcie *pcie) > > &intx_domain_ops, > > pcie); > > if (!pcie->intx_domain) { > > dev_err(dev, "failed to create INTx IRQ domain\n"); > > - return -ENODEV; > > + ret = -ENODEV; > > + goto out_put_node; > > } > > > > /* Setup MSI */ > > @@ -623,13 +624,15 @@ static int mtk_pcie_init_irq_domains(struct > > mtk_gen3_pcie *pcie) > > goto err_msi_domain; > > } > > > > + of_node_put(intc_node); > > return 0; > > > > err_msi_domain: > > irq_domain_remove(pcie->msi_bottom_domain); > > err_msi_bottom_domain: > > irq_domain_remove(pcie->intx_domain); > > - > > +out_put_node: > > + of_node_put(intc_node); > > return ret; > > } > > > > -- > > 2.25.1 > > > > > > _______________________________________________ > > linux-arm-kernel mailing list > > linux-arm-kernel@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
On Wed, Jun 01, 2022 at 08:12:58AM +0400, Miaoqian Lin wrote: > of_get_child_by_name() returns a node pointer with refcount > incremented, we should use of_node_put() on it when not need anymore. > Add missing of_node_put() to avoid refcount leak. > > Fixes: 814cceebba9b ("PCI: mediatek-gen3: Add INTx support") > Signed-off-by: Miaoqian Lin <linmq006@gmail.com> Applied to pci/ctrl/mediatek-gen3 with Miles' reviewed-by and Jianjun's ack, thanks! > --- > changes in v2: > - move of_node_put(intc_node) right after irq_domain_add_linear to cover > normal path and error paths. > --- > changes in v3: > - call of_node_put() in error paths with goto, and call of_node_put() before > return 0 in normal path. Since this function has a goto part to handle > resources, so put them together, as suggested by Miles Chen <miles.chen@mediatek.com> > > v1 link: https://lore.kernel.org/all/20220526110246.53502-1-linmq006@gmail.com/ > v2 link: https://lore.kernel.org/all/20220530064807.34534-1-linmq006@gmail.com/ > --- > drivers/pci/controller/pcie-mediatek-gen3.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c > index 3e8d70bfabc6..bceed28446ed 100644 > --- a/drivers/pci/controller/pcie-mediatek-gen3.c > +++ b/drivers/pci/controller/pcie-mediatek-gen3.c > @@ -600,7 +600,8 @@ static int mtk_pcie_init_irq_domains(struct mtk_gen3_pcie *pcie) > &intx_domain_ops, pcie); > if (!pcie->intx_domain) { > dev_err(dev, "failed to create INTx IRQ domain\n"); > - return -ENODEV; > + ret = -ENODEV; > + goto out_put_node; > } > > /* Setup MSI */ > @@ -623,13 +624,15 @@ static int mtk_pcie_init_irq_domains(struct mtk_gen3_pcie *pcie) > goto err_msi_domain; > } > > + of_node_put(intc_node); > return 0; > > err_msi_domain: > irq_domain_remove(pcie->msi_bottom_domain); > err_msi_bottom_domain: > irq_domain_remove(pcie->intx_domain); > - > +out_put_node: > + of_node_put(intc_node); > return ret; > } > > -- > 2.25.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff --git a/drivers/pci/controller/pcie-mediatek-gen3.c b/drivers/pci/controller/pcie-mediatek-gen3.c index 3e8d70bfabc6..bceed28446ed 100644 --- a/drivers/pci/controller/pcie-mediatek-gen3.c +++ b/drivers/pci/controller/pcie-mediatek-gen3.c @@ -600,7 +600,8 @@ static int mtk_pcie_init_irq_domains(struct mtk_gen3_pcie *pcie) &intx_domain_ops, pcie); if (!pcie->intx_domain) { dev_err(dev, "failed to create INTx IRQ domain\n"); - return -ENODEV; + ret = -ENODEV; + goto out_put_node; } /* Setup MSI */ @@ -623,13 +624,15 @@ static int mtk_pcie_init_irq_domains(struct mtk_gen3_pcie *pcie) goto err_msi_domain; } + of_node_put(intc_node); return 0; err_msi_domain: irq_domain_remove(pcie->msi_bottom_domain); err_msi_bottom_domain: irq_domain_remove(pcie->intx_domain); - +out_put_node: + of_node_put(intc_node); return ret; }
of_get_child_by_name() returns a node pointer with refcount incremented, we should use of_node_put() on it when not need anymore. Add missing of_node_put() to avoid refcount leak. Fixes: 814cceebba9b ("PCI: mediatek-gen3: Add INTx support") Signed-off-by: Miaoqian Lin <linmq006@gmail.com> --- changes in v2: - move of_node_put(intc_node) right after irq_domain_add_linear to cover normal path and error paths. --- changes in v3: - call of_node_put() in error paths with goto, and call of_node_put() before return 0 in normal path. Since this function has a goto part to handle resources, so put them together, as suggested by Miles Chen <miles.chen@mediatek.com> v1 link: https://lore.kernel.org/all/20220526110246.53502-1-linmq006@gmail.com/ v2 link: https://lore.kernel.org/all/20220530064807.34534-1-linmq006@gmail.com/ --- drivers/pci/controller/pcie-mediatek-gen3.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)