lkml.org 
[lkml]   [2019]   [Dec]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.3 014/135] clk: samsung: exynos5433: Fix error paths
    Date
    From: Marek Szyprowski <m.szyprowski@samsung.com>

    [ Upstream commit faac3604d05e8015567124e5ee79edc3f1568a89 ]

    Add checking the value returned by samsung_clk_alloc_reg_dump() and
    devm_kcalloc(). While fixing this, also release all gathered clocks.

    Fixes: 523d3de41f02 ("clk: samsung: exynos5433: Add support for runtime PM")
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
    Acked-by: Chanwoo Choi <cw00.choi@samsung.com>
    [s.nawrocki: squashed patch from K. Kozlowski adding missing slab.h header]
    Reported-by: kbuild test robot <lkp@intel.com>
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/clk/samsung/clk-exynos5433.c | 14 ++++++++++++--
    1 file changed, 12 insertions(+), 2 deletions(-)

    diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c
    index 7824c2ba3d8e6..4b1aa9382ad28 100644
    --- a/drivers/clk/samsung/clk-exynos5433.c
    +++ b/drivers/clk/samsung/clk-exynos5433.c
    @@ -13,6 +13,7 @@
    #include <linux/of_device.h>
    #include <linux/platform_device.h>
    #include <linux/pm_runtime.h>
    +#include <linux/slab.h>

    #include <dt-bindings/clock/exynos5433.h>

    @@ -5584,6 +5585,8 @@ static int __init exynos5433_cmu_probe(struct platform_device *pdev)

    data->clk_save = samsung_clk_alloc_reg_dump(info->clk_regs,
    info->nr_clk_regs);
    + if (!data->clk_save)
    + return -ENOMEM;
    data->nr_clk_save = info->nr_clk_regs;
    data->clk_suspend = info->suspend_regs;
    data->nr_clk_suspend = info->nr_suspend_regs;
    @@ -5592,12 +5595,19 @@ static int __init exynos5433_cmu_probe(struct platform_device *pdev)
    if (data->nr_pclks > 0) {
    data->pclks = devm_kcalloc(dev, sizeof(struct clk *),
    data->nr_pclks, GFP_KERNEL);
    -
    + if (!data->pclks) {
    + kfree(data->clk_save);
    + return -ENOMEM;
    + }
    for (i = 0; i < data->nr_pclks; i++) {
    struct clk *clk = of_clk_get(dev->of_node, i);

    - if (IS_ERR(clk))
    + if (IS_ERR(clk)) {
    + kfree(data->clk_save);
    + while (--i >= 0)
    + clk_put(data->pclks[i]);
    return PTR_ERR(clk);
    + }
    data->pclks[i] = clk;
    }
    }
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-12-04 00:13    [W:2.657 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site