drivers/pci/controller/pcie-mediatek-gen3.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
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(-)
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
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
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
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/
© 2016 - 2024 Red Hat, Inc.