2022-03-02 23:36:07

by tangmeng

[permalink] [raw]
Subject: [PATCH] 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: Meng Tang <[email protected]>
---
sound/soc/codecs/hdac_hda.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

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);
--
2.20.1




2022-03-03 15:15:02

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH] ASoC: hdac_hda: Avoid unexpected match when pcm_name is "Analog"

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