ASoC: SOF: Intel: hda-dai: fix possible stream_tag leak
PATCH 1/1 ASoC: SOF: Intel: hda-dai: fix possible stream_tag leak
[ Upstream commit 1f810d2b6b2fbdc5279644d8b2c140b1f7c9d43d ]
The reason for manual backport is that in 6.2 there were a naming cleanup around hdac, link, hlink, for example snd_hdac_ext_bus_get_link is renamed to snd_hdac_ext_bus_get_hlink_by_name in 6.2.
The HDaudio stream allocation is done first, and in a second step the LOSIDV parameter is programmed for the multi-link used by a codec.
This leads to a possible stream_tag leak, e.g. if a DisplayAudio link is not used. This would happen when a non-Intel graphics card is used and userspace unconditionally uses the Intel Display Audio PCMs without checking if they are connected to a receiver with jack controls.
We should first check that there is a valid multi-link entry to configure before allocating a stream_tag. This change aligns the dma_assign and dma_cleanup phases.
Cc: [email protected] # 6.1.x 6.0.x
Complements: b0cd60f3e9f5 ("ALSA/ASoC: hda: clarify bus_get_link() and bus_link_get() helpers")
--- sound/soc/sof/intel/hda-dai.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
sound/soc/sof/intel/hda-dai.c +4 -4
@@ -216,6 +216,10 @@ static int hda_link_dma_hw_params(struct snd_pcm_substream *substream,struct hdac_bus *bus = hstream->bus;struct hdac_ext_link *link; + link =snd_hdac_ext_bus_get_link (bus, codec_dai->component->name); +if (!link) +return -EINVAL ; + hext_stream =snd_soc_dai_get_dma_data (cpu_dai, substream);if (!hext_stream) { hext_stream =hda_link_stream_assign (bus, substream);
@@ -225,10 +229,6 @@ static int hda_link_dma_hw_params(struct snd_pcm_substream *substream,snd_soc_dai_set_dma_data (cpu_dai, substream, (void *)hext_stream); } - link =snd_hdac_ext_bus_get_link (bus, codec_dai->component->name); -if (!link) -return -EINVAL ; -/* set the hdac_stream in the codec dai */ snd_soc_dai_set_stream (codec_dai,hdac_stream (hext_stream), substream->stream);
Signature · 1 line
2.39.2