aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
authorPeter Ujfalusi <peter.ujfalusi@linux.intel.com>2026-05-26 13:57:47 +0300
committerMark Brown <broonie@kernel.org>2026-05-26 17:50:15 +0100
commit21a5adffad463344e9aca6ee697f45a079cb3ef5 (patch)
tree3763db343d9eea6eb08dda0b54aea438322a9db4 /sound
parente7ae89a0c97ce2b68b0983cd01eda67cf373517d (diff)
downloadlinux-next-history-21a5adffad463344e9aca6ee697f45a079cb3ef5.tar.gz
ASoC: SOF: ipc4-topology: Validate the number of in/out formats for src/asrc
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>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/sof/ipc4-topology.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/sound/soc/sof/ipc4-topology.c b/sound/soc/sof/ipc4-topology.c
index 76812d8fb567f..f5623cff05544 100644
--- a/sound/soc/sof/ipc4-topology.c
+++ b/sound/soc/sof/ipc4-topology.c
@@ -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) {