On 19. 10. 2. 오후 5:53, Marek Szyprowski wrote: > Add checking the value returned by samsung_clk_alloc_reg_dump() and > devm_kcalloc(). While fixing this, also release all gathered clocks. > > Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > --- > drivers/clk/samsung/clk-exynos5433.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/drivers/clk/samsung/clk-exynos5433.c b/drivers/clk/samsung/clk-exynos5433.c > index 7824c2ba3d8e..0b60316331a0 100644 > --- a/drivers/clk/samsung/clk-exynos5433.c > +++ b/drivers/clk/samsung/clk-exynos5433.c > @@ -5584,6 +5584,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 +5594,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; > } > } > Acked-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx> -- Best Regards, Chanwoo Choi Samsung Electronics