mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-21 23:16:50 +08:00
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:8b72562668("ASoC: amd: acp: Add support for RT5682-VS codec") Fixes:d4c750f2c7("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>
This commit is contained in:
@@ -127,8 +127,13 @@ static int acp_card_rt5682_init(struct snd_soc_pcm_runtime *rtd)
|
||||
if (drvdata->hs_codec_id != RT5682)
|
||||
return -EINVAL;
|
||||
|
||||
drvdata->wclk = clk_get(component->dev, "rt5682-dai-wclk");
|
||||
drvdata->bclk = clk_get(component->dev, "rt5682-dai-bclk");
|
||||
drvdata->wclk = devm_clk_get(component->dev, "rt5682-dai-wclk");
|
||||
if (IS_ERR(drvdata->wclk))
|
||||
return PTR_ERR(drvdata->wclk);
|
||||
|
||||
drvdata->bclk = devm_clk_get(component->dev, "rt5682-dai-bclk");
|
||||
if (IS_ERR(drvdata->bclk))
|
||||
return PTR_ERR(drvdata->bclk);
|
||||
|
||||
ret = snd_soc_dapm_new_controls(dapm, rt5682_widgets,
|
||||
ARRAY_SIZE(rt5682_widgets));
|
||||
@@ -370,8 +375,13 @@ static int acp_card_rt5682s_init(struct snd_soc_pcm_runtime *rtd)
|
||||
return -EINVAL;
|
||||
|
||||
if (!drvdata->soc_mclk) {
|
||||
drvdata->wclk = clk_get(component->dev, "rt5682-dai-wclk");
|
||||
drvdata->bclk = clk_get(component->dev, "rt5682-dai-bclk");
|
||||
drvdata->wclk = devm_clk_get(component->dev, "rt5682-dai-wclk");
|
||||
if (IS_ERR(drvdata->wclk))
|
||||
return PTR_ERR(drvdata->wclk);
|
||||
|
||||
drvdata->bclk = devm_clk_get(component->dev, "rt5682-dai-bclk");
|
||||
if (IS_ERR(drvdata->bclk))
|
||||
return PTR_ERR(drvdata->bclk);
|
||||
}
|
||||
|
||||
ret = snd_soc_dapm_new_controls(dapm, rt5682s_widgets,
|
||||
|
||||
Reference in New Issue
Block a user