]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: SOF: stream-ipc: Check for cstream nullity in sof_ipc_msg_data()
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Wed, 5 Feb 2025 13:52:31 +0000 (15:52 +0200)
committerMark Brown <broonie@kernel.org>
Wed, 5 Feb 2025 14:06:26 +0000 (14:06 +0000)
The nullity of sps->cstream should be checked similarly as it is done in
sof_set_stream_data_offset() function.
Assuming that it is not NULL if sps->stream is NULL is incorrect and can
lead to NULL pointer dereference.

Fixes: 090349a9feba ("ASoC: SOF: Add support for compress API for stream data/offset")
Cc: stable@vger.kernel.org
Reported-by: Curtis Malainey <cujomalainey@chromium.org>
Closes: https://github.com/thesofproject/linux/pull/5214
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Curtis Malainey <cujomalainey@chromium.org>
Link: https://patch.msgid.link/20250205135232.19762-2-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/stream-ipc.c

index 794c7bbccbaf9202d836d340229bec9108600aa1..8262443ac89ad1f2fc8c7a32048cb321b2722c5f 100644 (file)
@@ -43,7 +43,7 @@ int sof_ipc_msg_data(struct snd_sof_dev *sdev,
                                return -ESTRPIPE;
 
                        posn_offset = stream->posn_offset;
-               } else {
+               } else if (sps->cstream) {
 
                        struct sof_compr_stream *sstream = sps->cstream->runtime->private_data;
 
@@ -51,6 +51,10 @@ int sof_ipc_msg_data(struct snd_sof_dev *sdev,
                                return -ESTRPIPE;
 
                        posn_offset = sstream->posn_offset;
+
+               } else {
+                       dev_err(sdev->dev, "%s: No stream opened\n", __func__);
+                       return -EINVAL;
                }
 
                snd_sof_dsp_mailbox_read(sdev, posn_offset, p, sz);