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 ]
There were just too many code changes since 5.10/5.15 stable to prevent clean picking the fix from mainline.
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] # 5.15.x 5.10.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
@@ -212,6 +212,10 @@ static int hda_link_hw_params(struct snd_pcm_substream *substream,int stream_tag;int ret; + link =snd_hdac_ext_bus_get_link (bus, codec_dai->component->name); +if (!link) +return -EINVAL ; +/* get stored dma data if resuming from system suspend */ link_dev =snd_soc_dai_get_dma_data (dai, substream);if (!link_dev) {
@@ -232,10 +236,6 @@ static int hda_link_hw_params(struct snd_pcm_substream *substream,if (ret <0 )return ret; - 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 (link_dev), substream->stream);
Signature · 1 line
2.39.2