]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: SOF: ipc4-topology: Validate the number of in/out formats for src/asrc
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Tue, 26 May 2026 10:57:47 +0000 (13:57 +0300)
committerMark Brown <broonie@kernel.org>
Tue, 26 May 2026 16:50:15 +0000 (17:50 +0100)
SRC and ASRC modules must have at least one input and on one output formats
to be usable.
Do a sanity check during setup type and fail if either the number of input
or output formats are 0.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://patch.msgid.link/20260526105748.26149-2-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/ipc4-topology.c

index 76812d8fb567ffe0b3bc952712eb2f88c4b472c9..f5623cff055448f08c249b9128145c2b11335831 100644 (file)
@@ -1092,6 +1092,15 @@ static int sof_ipc4_widget_setup_comp_src(struct snd_sof_widget *swidget)
        if (ret)
                goto err;
 
+       if (!src->available_fmt.num_input_formats ||
+           !src->available_fmt.num_output_formats) {
+               dev_err(scomp->dev,
+                       "Invalid number of formats: input: %d, output: %d\n",
+                       src->available_fmt.num_input_formats,
+                       src->available_fmt.num_output_formats);
+               goto err;
+       }
+
        ret = sof_update_ipc_object(scomp, &src->data, SOF_SRC_TOKENS, swidget->tuples,
                                    swidget->num_tuples, sizeof(*src), 1);
        if (ret) {
@@ -1135,6 +1144,15 @@ static int sof_ipc4_widget_setup_comp_asrc(struct snd_sof_widget *swidget)
        if (ret)
                goto err;
 
+       if (!asrc->available_fmt.num_input_formats ||
+           !asrc->available_fmt.num_output_formats) {
+               dev_err(scomp->dev,
+                       "Invalid number of formats: input: %d, output: %d\n",
+                       asrc->available_fmt.num_input_formats,
+                       asrc->available_fmt.num_output_formats);
+               goto err;
+       }
+
        ret = sof_update_ipc_object(scomp, &asrc->data, SOF_ASRC_TOKENS, swidget->tuples,
                                    swidget->num_tuples, sizeof(*asrc), 1);
        if (ret) {