Skip to content

Commit 01d1ba1

Browse files
krzkgregkh
authored andcommitted
ASoC: qcom: q6apm-lpass-dais: Fix NULL pointer dereference if source graph failed
[ Upstream commit 68f27f7 ] If earlier opening of source graph fails (e.g. ADSP rejects due to incorrect audioreach topology), the graph is closed and "dai_data->graph[dai->id]" is assigned NULL. Preparing the DAI for sink graph continues though and next call to q6apm_lpass_dai_prepare() receives dai_data->graph[dai->id]=NULL leading to NULL pointer exception: qcom-apm gprsvc:service:2:1: Error (1) Processing 0x01001002 cmd qcom-apm gprsvc:service:2:1: DSP returned error[1001002] 1 q6apm-lpass-dais 30000000.remoteproc:glink-edge:gpr:service@1:bedais: fail to start APM port 78 q6apm-lpass-dais 30000000.remoteproc:glink-edge:gpr:service@1:bedais: ASoC: error at snd_soc_pcm_dai_prepare on TX_CODEC_DMA_TX_3: -22 Unable to handle kernel NULL pointer dereference at virtual address 00000000000000a8 ... Call trace: q6apm_graph_media_format_pcm+0x48/0x120 (P) q6apm_lpass_dai_prepare+0x110/0x1b4 snd_soc_pcm_dai_prepare+0x74/0x108 __soc_pcm_prepare+0x44/0x160 dpcm_be_dai_prepare+0x124/0x1c0 Fixes: 30ad723 ("ASoC: qdsp6: audioreach: add q6apm lpass dai support") Cc: [email protected] Signed-off-by: Krzysztof Kozlowski <[email protected]> Reviewed-by: Srinivas Kandagatla <[email protected]> Message-ID: <[email protected]> Signed-off-by: Mark Brown <[email protected]> Signed-off-by: Sasha Levin <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent f6e1138 commit 01d1ba1

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

sound/soc/qcom/qdsp6/q6apm-lpass-dais.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,10 @@ static int q6apm_lpass_dai_prepare(struct snd_pcm_substream *substream, struct s
176176

177177
return 0;
178178
err:
179-
q6apm_graph_close(dai_data->graph[dai->id]);
180-
dai_data->graph[dai->id] = NULL;
179+
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
180+
q6apm_graph_close(dai_data->graph[dai->id]);
181+
dai_data->graph[dai->id] = NULL;
182+
}
181183
return rc;
182184
}
183185

0 commit comments

Comments
 (0)