[bug report] ASoC: amd: Add common framework to support I2S on ACP SOC

Dan Carpenter dan.carpenter at oracle.com
Thu Aug 18 13:16:59 CEST 2022


Hello Ajit Kumar Pandey,

The patch 623621a9f9e1: "ASoC: amd: Add common framework to support
I2S on ACP SOC" from Oct 19, 2021, leads to the following Smatch
static checker warning:

	sound/soc/amd/acp/acp-platform.c:199 acp_dma_open()
	warn: '&stream->list' not removed from list

sound/soc/amd/acp/acp-platform.c
    173 static int acp_dma_open(struct snd_soc_component *component, struct snd_pcm_substream *substream)
    174 {
    175         struct snd_pcm_runtime *runtime = substream->runtime;
    176         struct device *dev = component->dev;
    177         struct acp_dev_data *adata = dev_get_drvdata(dev);
    178         struct acp_stream *stream;
    179         int ret;
    180 
    181         stream = kzalloc(sizeof(*stream), GFP_KERNEL);
    182         if (!stream)
    183                 return -ENOMEM;
    184 
    185         stream->substream = substream;
    186 
    187         spin_lock_irq(&adata->acp_lock);
    188         list_add_tail(&stream->list, &adata->stream_list);

Stream added to the list

    189         spin_unlock_irq(&adata->acp_lock);
    190 
    191         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
    192                 runtime->hw = acp_pcm_hardware_playback;
    193         else
    194                 runtime->hw = acp_pcm_hardware_capture;
    195 
    196         ret = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
    197         if (ret < 0) {
    198                 dev_err(component->dev, "set integer constraint failed\n");
--> 199                 kfree(stream);

Use after free.

    200                 return ret;
    201         }
    202         runtime->private_data = stream;
    203 
    204         writel(1, ACP_EXTERNAL_INTR_ENB(adata));
    205 
    206         return ret;

Could we delay adding the stream to the list until right before this
"return 0;"?

    207 }

regards,
dan carpenter


More information about the Alsa-devel mailing list