]> git.itanic.dy.fi Git - linux-stable/commitdiff
clk: samsung: exynos5: Fix possible NULL pointer exception on platform_device_alloc...
authorKrzysztof Kozlowski <krzk@kernel.org>
Thu, 21 Feb 2019 11:45:51 +0000 (12:45 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 23 Mar 2019 19:10:03 +0000 (20:10 +0100)
commit 5f0b6216ea381b43c0dff88702d6cc5673d63922 upstream.

During initialization of subdevices if platform_device_alloc() failed,
returned NULL pointer will be later dereferenced.  Add proper error
paths to exynos5_clk_register_subcmu().  The return value of this
function is still ignored because at this stage of init there is nothing
we can do.

Fixes: b06a532bf1fa ("clk: samsung: Add Exynos5 sub-CMU clock driver")
Cc: <stable@vger.kernel.org>
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/clk/samsung/clk-exynos5-subcmu.c

index 93306283d764de29a379236961b430904e8c50a7..d07ef26bd052a934f8c0224425c211f523bf2ace 100644 (file)
@@ -136,15 +136,21 @@ static int __init exynos5_clk_register_subcmu(struct device *parent,
 {
        struct of_phandle_args genpdspec = { .np = pd_node };
        struct platform_device *pdev;
+       int ret;
 
        pdev = platform_device_alloc(info->pd_name, -1);
+       if (!pdev)
+               return -ENOMEM;
+
        pdev->dev.parent = parent;
        pdev->driver_override = "exynos5-subcmu";
        platform_set_drvdata(pdev, (void *)info);
        of_genpd_add_device(&genpdspec, &pdev->dev);
-       platform_device_add(pdev);
+       ret = platform_device_add(pdev);
+       if (ret)
+               platform_device_put(pdev);
 
-       return 0;
+       return ret;
 }
 
 static int __init exynos5_clk_probe(struct platform_device *pdev)