2017-03-07 10:54:41

by Jaehoon Chung

[permalink] [raw]
Subject: [PATCH] PCI: exynos: fix the NULL pointer dereference about elbi_base

Even though using phy framework, it has to get the elbi_base.
Before this patch, elbi_base should be NULL pointer.

Fixes: e7cd7ef58e1f ("PCI: exynos: Support the PHY generic framework")

Signed-off-by: Jaehoon Chung <[email protected]>
---
drivers/pci/dwc/pci-exynos.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/pci/dwc/pci-exynos.c b/drivers/pci/dwc/pci-exynos.c
index 993b650..44f774c 100644
--- a/drivers/pci/dwc/pci-exynos.c
+++ b/drivers/pci/dwc/pci-exynos.c
@@ -132,10 +132,6 @@ static int exynos5440_pcie_get_mem_resources(struct platform_device *pdev,
struct device *dev = pci->dev;
struct resource *res;

- /* If using the PHY framework, doesn't need to get other resource */
- if (ep->using_phy)
- return 0;
-
ep->mem_res = devm_kzalloc(dev, sizeof(*ep->mem_res), GFP_KERNEL);
if (!ep->mem_res)
return -ENOMEM;
@@ -145,6 +141,10 @@ static int exynos5440_pcie_get_mem_resources(struct platform_device *pdev,
if (IS_ERR(ep->mem_res->elbi_base))
return PTR_ERR(ep->mem_res->elbi_base);

+ /* If using the PHY framework, doesn't need to get other resource */
+ if (ep->using_phy)
+ return 0;
+
res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
ep->mem_res->phy_base = devm_ioremap_resource(dev, res);
if (IS_ERR(ep->mem_res->phy_base))
--
2.10.2


2017-03-07 18:52:43

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH] PCI: exynos: fix the NULL pointer dereference about elbi_base

On Tue, Mar 07, 2017 at 07:54:05PM +0900, Jaehoon Chung wrote:
> Even though using phy framework, it has to get the elbi_base.
> Before this patch, elbi_base should be NULL pointer.
>
> Fixes: e7cd7ef58e1f ("PCI: exynos: Support the PHY generic framework")
>
> Signed-off-by: Jaehoon Chung <[email protected]>

Provisionally applied to for-linus for v4.11, pending Jingoo's ack.
Thanks, Jaehoon!

> ---
> drivers/pci/dwc/pci-exynos.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/pci/dwc/pci-exynos.c b/drivers/pci/dwc/pci-exynos.c
> index 993b650..44f774c 100644
> --- a/drivers/pci/dwc/pci-exynos.c
> +++ b/drivers/pci/dwc/pci-exynos.c
> @@ -132,10 +132,6 @@ static int exynos5440_pcie_get_mem_resources(struct platform_device *pdev,
> struct device *dev = pci->dev;
> struct resource *res;
>
> - /* If using the PHY framework, doesn't need to get other resource */
> - if (ep->using_phy)
> - return 0;
> -
> ep->mem_res = devm_kzalloc(dev, sizeof(*ep->mem_res), GFP_KERNEL);
> if (!ep->mem_res)
> return -ENOMEM;
> @@ -145,6 +141,10 @@ static int exynos5440_pcie_get_mem_resources(struct platform_device *pdev,
> if (IS_ERR(ep->mem_res->elbi_base))
> return PTR_ERR(ep->mem_res->elbi_base);
>
> + /* If using the PHY framework, doesn't need to get other resource */
> + if (ep->using_phy)
> + return 0;
> +
> res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
> ep->mem_res->phy_base = devm_ioremap_resource(dev, res);
> if (IS_ERR(ep->mem_res->phy_base))
> --
> 2.10.2
>