Message ID | 20181107100854.28389-2-Zhiqiang.Hou@nxp.com (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
Series | PCI: dwc: add prefetchable memory range support | expand |
On Wed, Nov 07, 2018 at 10:09:04AM +0000, Z.q. Hou wrote: > From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> > > Free the allocated pci_host_bridge struct when failed to get > host bridge resources, and free the resource windows before > free the bridge. > > Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> > Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com> > --- > V2: > - Reworded the subject. > > drivers/pci/controller/dwc/pcie-designware-host.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c > index 29a05759a294..ecacce016489 100644 > --- a/drivers/pci/controller/dwc/pcie-designware-host.c > +++ b/drivers/pci/controller/dwc/pcie-designware-host.c > @@ -353,7 +353,7 @@ int dw_pcie_host_init(struct pcie_port *pp) > ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, > &bridge->windows, &pp->io_base); > if (ret) > - return ret; > + goto error; > > ret = devm_request_pci_bus_resources(dev, &bridge->windows); > if (ret) > @@ -502,6 +502,7 @@ int dw_pcie_host_init(struct pcie_port *pp) > return 0; > > error: > + pci_free_resource_list(&bridge->windows); This would cause a double-free, devm_request_pci_bus_resource already takes care of freeing resources, patch dropped. Lorenzo > pci_free_host_bridge(bridge); > return ret; > } > -- > 2.17.1 >
Hi Lorenzo, > -----Original Message----- > From: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> > Sent: 2018年12月5日 23:40 > To: Z.q. Hou <zhiqiang.hou@nxp.com> > Cc: linux-pci@vger.kernel.org; linux-kernel@vger.kernel.org; > bhelgaas@google.com; jingoohan1@gmail.com; > gustavo.pimentel@synopsys.com; Roy Zang <roy.zang@nxp.com>; Mingkai Hu > <mingkai.hu@nxp.com>; M.h. Lian <minghuan.lian@nxp.com> > Subject: Re: [PATCHv2 1/4] PCI: dwc: fix potential memory leak > > On Wed, Nov 07, 2018 at 10:09:04AM +0000, Z.q. Hou wrote: > > From: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> > > > > Free the allocated pci_host_bridge struct when failed to get host > > bridge resources, and free the resource windows before free the > > bridge. > > > > Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com> > > Acked-by: Gustavo Pimentel <gustavo.pimentel@synopsys.com> > > --- > > V2: > > - Reworded the subject. > > > > drivers/pci/controller/dwc/pcie-designware-host.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c > > b/drivers/pci/controller/dwc/pcie-designware-host.c > > index 29a05759a294..ecacce016489 100644 > > --- a/drivers/pci/controller/dwc/pcie-designware-host.c > > +++ b/drivers/pci/controller/dwc/pcie-designware-host.c > > @@ -353,7 +353,7 @@ int dw_pcie_host_init(struct pcie_port *pp) > > ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, > > &bridge->windows, &pp->io_base); > > if (ret) > > - return ret; > > + goto error; > > > > ret = devm_request_pci_bus_resources(dev, &bridge->windows); > > if (ret) > > @@ -502,6 +502,7 @@ int dw_pcie_host_init(struct pcie_port *pp) > > return 0; > > > > error: > > + pci_free_resource_list(&bridge->windows); > > This would cause a double-free, devm_request_pci_bus_resource already > takes care of freeing resources, patch dropped. Yes, I just understood. > Lorenzo > > > pci_free_host_bridge(bridge); > > return ret; > > } > > -- > > 2.17.1 > > Thanks, Zhiqiang
diff --git a/drivers/pci/controller/dwc/pcie-designware-host.c b/drivers/pci/controller/dwc/pcie-designware-host.c index 29a05759a294..ecacce016489 100644 --- a/drivers/pci/controller/dwc/pcie-designware-host.c +++ b/drivers/pci/controller/dwc/pcie-designware-host.c @@ -353,7 +353,7 @@ int dw_pcie_host_init(struct pcie_port *pp) ret = devm_of_pci_get_host_bridge_resources(dev, 0, 0xff, &bridge->windows, &pp->io_base); if (ret) - return ret; + goto error; ret = devm_request_pci_bus_resources(dev, &bridge->windows); if (ret) @@ -502,6 +502,7 @@ int dw_pcie_host_init(struct pcie_port *pp) return 0; error: + pci_free_resource_list(&bridge->windows); pci_free_host_bridge(bridge); return ret; }