diff options
| author | Wentao Liang <vulab@iscas.ac.cn> | 2026-01-13 01:47:16 +0000 |
|---|---|---|
| committer | Nishanth Menon <nm@ti.com> | 2026-01-14 11:00:07 -0600 |
| commit | 80db65d4acfb9ff12d00172aed39ea8b98261aad (patch) | |
| tree | f952477d9a4dae650e296bc13f7ac506e67f8cde /drivers/soc | |
| parent | c933138d45176780fabbbe7da263e04d5b3e525d (diff) | |
soc: ti: pruss: Fix double free in pruss_clk_mux_setup()
In the pruss_clk_mux_setup(), the devm_add_action_or_reset() indirectly
calls pruss_of_free_clk_provider(), which calls of_node_put(clk_mux_np)
on the error path. However, after the devm_add_action_or_reset()
returns, the of_node_put(clk_mux_np) is called again, causing a double
free.
Fix by returning directly, to avoid the duplicate of_node_put().
Fixes: ba59c9b43c86 ("soc: ti: pruss: support CORECLK_MUX and IEPCLK_MUX")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
Link: https://patch.msgid.link/20260113014716.2464741-1-vulab@iscas.ac.cn
Signed-off-by: Nishanth Menon <nm@ti.com>
Diffstat (limited to 'drivers/soc')
| -rw-r--r-- | drivers/soc/ti/pruss.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/soc/ti/pruss.c b/drivers/soc/ti/pruss.c index 038576805bfa..0fd59c73f585 100644 --- a/drivers/soc/ti/pruss.c +++ b/drivers/soc/ti/pruss.c @@ -366,12 +366,10 @@ static int pruss_clk_mux_setup(struct pruss *pruss, struct clk *clk_mux, ret = devm_add_action_or_reset(dev, pruss_of_free_clk_provider, clk_mux_np); - if (ret) { + if (ret) dev_err(dev, "failed to add clkmux free action %d", ret); - goto put_clk_mux_np; - } - return 0; + return ret; put_clk_mux_np: of_node_put(clk_mux_np); |
