Skip to content

Commit

Permalink
ASoC: SOF: Intel: hda-dai: fix possible stream_tag leak
Browse files Browse the repository at this point in the history
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 PCM 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.

Link: thesofproject#4151
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
  • Loading branch information
plbossart committed Jan 25, 2023
1 parent 57ada38 commit fbd857e
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions sound/soc/sof/intel/hda-dai.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,10 @@ static int hda_link_dma_hw_params(struct snd_pcm_substream *substream,
sdev = snd_soc_component_get_drvdata(cpu_dai->component);
bus = sof_to_bus(sdev);

hlink = snd_hdac_ext_bus_get_hlink_by_name(bus, codec_dai->component->name);
if (!hlink)
return -EINVAL;

hext_stream = ops->get_hext_stream(sdev, cpu_dai, substream);

if (!hext_stream) {
Expand All @@ -155,9 +159,6 @@ static int hda_link_dma_hw_params(struct snd_pcm_substream *substream,

hstream = &hext_stream->hstream;
stream_tag = hstream->stream_tag;
hlink = snd_hdac_ext_bus_get_hlink_by_name(bus, codec_dai->component->name);
if (!hlink)
return -EINVAL;

if (hext_stream->hstream.direction == SNDRV_PCM_STREAM_PLAYBACK)
snd_hdac_ext_bus_link_set_stream_id(hlink, stream_tag);
Expand Down

0 comments on commit fbd857e

Please sign in to comment.