[bug report] ALSA: hda: Interrupt servicing and BDL setup for compress streams

Cezary Rojewski cezary.rojewski at intel.com
Wed Dec 7 15:35:12 CET 2022


On 2022-12-07 3:28 PM, Dan Carpenter wrote:
> Hello Cezary Rojewski,
> 
> The patch 3e9582267e3a: "ALSA: hda: Interrupt servicing and BDL setup
> for compress streams" from Dec 2, 2022, leads to the following Smatch
> static checker warning:
> 
> 	sound/hda/hdac_stream.c:544 snd_hdac_stream_setup_periods()
> 	error: uninitialized symbol 'dmab'.
> 
> sound/hda/hdac_stream.c
>     487  int snd_hdac_stream_setup_periods(struct hdac_stream *azx_dev)
>     488  {
>     489          struct hdac_bus *bus = azx_dev->bus;
>     490          struct snd_pcm_substream *substream = azx_dev->substream;
>     491          struct snd_compr_stream *cstream = azx_dev->cstream;
>     492          struct snd_pcm_runtime *runtime = NULL;
>     493          struct snd_dma_buffer *dmab;
>     494          __le32 *bdl;
>     495          int i, ofs, periods, period_bytes;
>     496          int pos_adj, pos_align;
>     497
>     498          if (substream) {
>     499                  runtime = substream->runtime;
>     500                  dmab = snd_pcm_get_dma_buf(substream);
>     501          } else if (cstream) {
>     502                  dmab = snd_pcm_get_dma_buf(cstream);
>     503          }
> 
> dmab is not initialized on else path.

Hello,

Thanks for the report. Perhaps I should just do: s/else if/else/ as the 
situation with ->substream AND ->cstream being uninitialized is invalid.

Before support for compress stream was added in this part of the code, 
it was always assumed ->substream is valid.

So, either s/else if/else or append:
	} else {
		return -EINVAL;
	}

Takashi, what do you think?


Regards,
Czarek


More information about the Alsa-devel mailing list