Message ID | 20220302094351.3487-1-tangmeng@uniontech.com (mailing list archive) |
---|---|
State | Accepted |
Commit | e94769900f4302b4034945e5d9ec8262a2f5e086 |
Headers | show |
Series | ASoC: hdac_hda: Avoid unexpected match when pcm_name is "Analog" | expand |
On Wed, 2 Mar 2022 17:43:51 +0800, Meng Tang wrote: > 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. > > [...] Applied to https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next Thanks! [1/1] ASoC: hdac_hda: Avoid unexpected match when pcm_name is "Analog" commit: e94769900f4302b4034945e5d9ec8262a2f5e086 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark
diff --git a/sound/soc/codecs/hdac_hda.c b/sound/soc/codecs/hdac_hda.c index 667f3df239c7..a9f61c7e44ee 100644 --- a/sound/soc/codecs/hdac_hda.c +++ b/sound/soc/codecs/hdac_hda.c @@ -363,8 +363,13 @@ 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) { - 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; + } } dev_err(&hcodec->core.dev, "didn't find PCM for DAI %s\n", dai->name);
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: Meng Tang <tangmeng@uniontech.com> --- sound/soc/codecs/hdac_hda.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)