Commit e9476990 authored by Meng Tang's avatar Meng Tang Committed by Mark Brown

ASoC: hdac_hda: Avoid unexpected match when pcm_name is "Analog"

pcm name can be "Analog" and "Alt Analog", cpcm->name can be
"Analog Codec DAI" and "Alt Analog Codec DAI". When pcm_name
is "Analog", "Analog Codec DAI" and "Alt Analog Codec DAI" are
both satisfy the 'if (strstr(cpcm->name, pcm_name))' condition,
which may cause the returned cpcm to be "Alt Analog Codec DAI".

Even if we get the pcm name by id, and "Analog Codec DAI" goes
into the loop before "Alt Analog Codec DAI", but I still think
we'd better have multiple insurances against unexpected return
values. After, we can correctly return the expected result
even if other relevant places are changed.
Signed-off-by: default avatarMeng Tang <tangmeng@uniontech.com>
Link: https://lore.kernel.org/r/20220302094351.3487-1-tangmeng@uniontech.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 227178d2
...@@ -363,9 +363,14 @@ static struct hda_pcm *snd_soc_find_pcm_from_dai(struct hdac_hda_priv *hda_pvt, ...@@ -363,9 +363,14 @@ static struct hda_pcm *snd_soc_find_pcm_from_dai(struct hdac_hda_priv *hda_pvt,
} }
list_for_each_entry(cpcm, &hcodec->pcm_list_head, list) { list_for_each_entry(cpcm, &hcodec->pcm_list_head, list) {
if (strstr(cpcm->name, pcm_name)) if (strstr(cpcm->name, pcm_name)) {
if (strcmp(pcm_name, "Analog") == 0) {
if (strstr(cpcm->name, "Alt Analog"))
continue;
}
return cpcm; return cpcm;
} }
}
dev_err(&hcodec->core.dev, "didn't find PCM for DAI %s\n", dai->name); dev_err(&hcodec->core.dev, "didn't find PCM for DAI %s\n", dai->name);
return NULL; return NULL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment