[PATCH] fix: sound/soc/samsung: snow_probe: leaked of_node references on devm_snd_soc_register_card failure
From: WenTao Liang
Date: Fri Jun 26 2026 - 23:59:50 EST
In snow_probe(), snd_soc_of_get_dai_link_codecs() acquires of_node
references for codecs, and of_parse_phandle() acquires a reference for
cpus->of_node. When devm_snd_soc_register_card() fails, these references
are never released. Additionally, link->platforms->of_node is assigned
from link->cpus->of_node without of_node_get(), causing a double put on
card deregistration.
Add proper cleanup of codecs and cpu of_node references on the
register_card failure path, and add of_node_get() before the platforms
assignment.
Cc: stable@xxxxxxxxxxxxxxx
Fixes: 27c6eaebcf75 ("ASoC: samsung: Use dev_err_probe() helper")
Signed-off-by: WenTao Liang <vulab@xxxxxxxxxxx>
---
sound/soc/samsung/snow.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/sound/soc/samsung/snow.c b/sound/soc/samsung/snow.c
index 66ef49dff1ba..78d7d494d51d 100644
--- a/sound/soc/samsung/snow.c
+++ b/sound/soc/samsung/snow.c
@@ -203,6 +203,7 @@ static int snow_probe(struct platform_device *pdev)
}
}
+ of_node_get(link->cpus->of_node);
link->platforms->of_node = link->cpus->of_node;
/* Update card-name if provided through DT, else use default name */
@@ -211,9 +212,12 @@ static int snow_probe(struct platform_device *pdev)
snd_soc_card_set_drvdata(card, priv);
ret = devm_snd_soc_register_card(dev, card);
- if (ret)
+ if (ret) {
+ snd_soc_of_put_dai_link_codecs(link);
+ of_node_put(link->cpus->of_node);
return dev_err_probe(&pdev->dev, ret,
"snd_soc_register_card failed\n");
+ }
return 0;
}
--
2.39.5 (Apple Git-154)