[PATCH] clk: samsung: Fix parent clock reference leak on enable failure

From: Wentao Liang

Date: Tue Sep 15 2026 - 01:55:12 EST


In exynos_arm64_enable_bus_clk(), when dev is NULL the parent clock is
obtained with of_clk_get_by_name() and then handed to
clk_prepare_enable(). On the enable failure path the function returns
directly without clk_put(), leaking the consumer reference.

Store the clk_prepare_enable() return value and release the reference
with clk_put() before returning on failure.

Fixes: 454e8d296ce4 ("clk: samsung: Extract parent clock enabling to common function")
Cc: stable@xxxxxxxxxxxxxxx
Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
---
drivers/clk/samsung/clk-exynos-arm64.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/samsung/clk-exynos-arm64.c b/drivers/clk/samsung/clk-exynos-arm64.c
index 35d4de233cc1..05c4a15dfe99 100644
--- a/drivers/clk/samsung/clk-exynos-arm64.c
+++ b/drivers/clk/samsung/clk-exynos-arm64.c
@@ -149,6 +149,7 @@ static int __init exynos_arm64_enable_bus_clk(struct device *dev,
struct device_node *np, const struct samsung_cmu_info *cmu)
{
struct clk *parent_clk;
+ int ret;

if (!cmu->clk_name)
return 0;
@@ -167,7 +168,11 @@ static int __init exynos_arm64_enable_bus_clk(struct device *dev,
if (IS_ERR(parent_clk))
return PTR_ERR(parent_clk);

- return clk_prepare_enable(parent_clk);
+ ret = clk_prepare_enable(parent_clk);
+ if (ret)
+ clk_put(parent_clk);
+
+ return ret;
}

static int __init exynos_arm64_cmu_prepare_pm(struct device *dev,
--
2.34.1