clk: samsung: exynos5433: Fix error paths

Message ID 20191002085309.9473-1-m.szyprowski@samsung.com
State New
Headers show
Series
  • clk: samsung: exynos5433: Fix error paths
Related show

Commit Message

Marek Szyprowski Oct. 2, 2019, 8:53 a.m.
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@samsung.com>

---
 drivers/clk/samsung/clk-exynos5433.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

-- 
2.17.1

Comments

Krzysztof Kozlowski Oct. 2, 2019, 9:07 a.m. | #1
On Wed, Oct 02, 2019 at 10:53:09AM +0200, 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@samsung.com>

> ---

>  drivers/clk/samsung/clk-exynos5433.c | 13 +++++++++++--

>  1 file changed, 11 insertions(+), 2 deletions(-)


Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>


Best regards,
Krzysztof
Chanwoo Choi Oct. 3, 2019, 11:07 p.m. | #2
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@samsung.com>

> ---

>  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@samsung.com>


-- 
Best Regards,
Chanwoo Choi
Samsung Electronics
Stephen Boyd Oct. 4, 2019, 9:45 p.m. | #3
Quoting Marek Szyprowski (2019-10-02 01:53:09)
> 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@samsung.com>

> ---


Any fixes tag?
Marek Szyprowski Oct. 7, 2019, 6:25 a.m. | #4
On 04.10.2019 23:45, Stephen Boyd wrote:
> Quoting Marek Szyprowski (2019-10-02 01:53:09)

>> 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@samsung.com>

>> ---

> Any fixes tag?


Fixes: 523d3de41f02 ("clk: samsung: exynos5433: Add support for runtime PM")

Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland
Sylwester Nawrocki Oct. 7, 2019, 8:54 a.m. | #5
On 10/2/19 10: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@samsung.com>


Acked-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Sylwester Nawrocki Oct. 23, 2019, 12:57 p.m. | #6
On 10/2/19 10: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@samsung.com>


Applied, thanks.

Patch

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;
 		}
 	}