Skip to content

Commit 30c64fb

Browse files
Chen Nibroonie
authored andcommitted
ASoC: amd: acp-mach-common: Add missing error check for clock acquisition
The acp_card_rt5682_init() and acp_card_rt5682s_init() functions did not check the return values of clk_get(). This could lead to a kernel crash when the invalid pointers are later dereferenced by clock core functions. Fix this by: 1. Changing clk_get() to the device-managed devm_clk_get(). 2. Adding IS_ERR() checks immediately after each clock acquisition. Fixes: 8b72562 ("ASoC: amd: acp: Add support for RT5682-VS codec") Fixes: d4c750f ("ASoC: amd: acp: Add generic machine driver support for ACP cards") Signed-off-by: Chen Ni <nichen@iscas.ac.cn> Link: https://patch.msgid.link/20260310044327.2582018-1-nichen@iscas.ac.cn Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent a968373 commit 30c64fb

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

sound/soc/amd/acp/acp-mach-common.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,13 @@ static int acp_card_rt5682_init(struct snd_soc_pcm_runtime *rtd)
127127
if (drvdata->hs_codec_id != RT5682)
128128
return -EINVAL;
129129

130-
drvdata->wclk = clk_get(component->dev, "rt5682-dai-wclk");
131-
drvdata->bclk = clk_get(component->dev, "rt5682-dai-bclk");
130+
drvdata->wclk = devm_clk_get(component->dev, "rt5682-dai-wclk");
131+
if (IS_ERR(drvdata->wclk))
132+
return PTR_ERR(drvdata->wclk);
133+
134+
drvdata->bclk = devm_clk_get(component->dev, "rt5682-dai-bclk");
135+
if (IS_ERR(drvdata->bclk))
136+
return PTR_ERR(drvdata->bclk);
132137

133138
ret = snd_soc_dapm_new_controls(dapm, rt5682_widgets,
134139
ARRAY_SIZE(rt5682_widgets));
@@ -370,8 +375,13 @@ static int acp_card_rt5682s_init(struct snd_soc_pcm_runtime *rtd)
370375
return -EINVAL;
371376

372377
if (!drvdata->soc_mclk) {
373-
drvdata->wclk = clk_get(component->dev, "rt5682-dai-wclk");
374-
drvdata->bclk = clk_get(component->dev, "rt5682-dai-bclk");
378+
drvdata->wclk = devm_clk_get(component->dev, "rt5682-dai-wclk");
379+
if (IS_ERR(drvdata->wclk))
380+
return PTR_ERR(drvdata->wclk);
381+
382+
drvdata->bclk = devm_clk_get(component->dev, "rt5682-dai-bclk");
383+
if (IS_ERR(drvdata->bclk))
384+
return PTR_ERR(drvdata->bclk);
375385
}
376386

377387
ret = snd_soc_dapm_new_controls(dapm, rt5682s_widgets,

0 commit comments

Comments
 (0)