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.

Signed-off-by: Krzysztof Kozlowski <k...@kernel.org>
---
 drivers/clk/samsung/clk-exynos5-subcmu.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/samsung/clk-exynos5-subcmu.c 
b/drivers/clk/samsung/clk-exynos5-subcmu.c
index 93306283d764..d07ef26bd052 100644
--- a/drivers/clk/samsung/clk-exynos5-subcmu.c
+++ b/drivers/clk/samsung/clk-exynos5-subcmu.c
@@ -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)
-- 
2.7.4

Reply via email to