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.4 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.4.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
@@ -211,6 +211,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) {
@@ -231,10 +235,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 stream tag in the codec dai dma params */ if (substream->stream ==SNDRV_PCM_STREAM_PLAYBACK )snd_soc_dai_set_tdm_slot (codec_dai, stream_tag,0 ,0 ,0 );
Signature · 1 line
2.39.2
Greg KH
maintainerQuoted 4 lines · Peter Ujfalusi
[ Upstream commit
1f810d2b6b2fbdc5279644d8b2c140b1f7c9d43d]There were just too many code changes since 5.4 stable to prevent clean picking the fix from mainline.
Thanks, all backports now queued up.
greg k-h