ASoC: SOF: ipc4-topology: Harden loops for looking up ALH copiers
Subsystems (4)
Peter Ujfalusi
maintainerPATCH 1/1 ASoC: SOF: ipc4-topology: Harden loops for looking up ALH copiers
Other, non DAI copier widgets could have the same stream name (sname) as the ALH copier and in that case the copier->data is NULL, no alh_data is attached, which could lead to NULL pointer dereference.
We could check for this NULL pointer in sof_ipc4_prepare_copier_module() and avoid the crash, but a similar loop in sof_ipc4_widget_setup_comp_dai() will miscalculate the ALH device count, causing broken audio.
The correct fix is to harden the matching logic by making sure that the
1. widget is a DAI widget - so dai = w->private is valid
2. the dai (and thus the copier) is ALH copier
--- sound/soc/sof/ipc4-topology.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
sound/soc/sof/ipc4-topology.c +10 -2
@@ -765,10 +765,16 @@ static int sof_ipc4_widget_setup_comp_dai(struct snd_sof_widget *swidget) }list_for_each_entry (w, &sdev->widget_list, list) { -if (w->widget->sname && +struct snd_sof_dai *alh_dai; + +if (!WIDGET_IS_DAI (w->id) || !w->widget->sname ||strcmp (w->widget->sname, swidget->widget->sname))continue ; + alh_dai = w->private; +if (alh_dai->type !=SOF_DAI_INTEL_ALH ) +continue ; + blob->alh_cfg.device_count++; }
@@ -2061,11 +2067,13 @@ sof_ipc4_prepare_copier_module(struct snd_sof_widget *swidget,list_for_each_entry (w, &sdev->widget_list, list) {u32 node_type; -if (w->widget->sname && +if (!WIDGET_IS_DAI (w->id) || !w->widget->sname ||strcmp (w->widget->sname, swidget->widget->sname))continue ; dai = w->private; +if (dai->type !=SOF_DAI_INTEL_ALH ) +continue ; alh_copier = (struct sof_ipc4_copier *)dai->private; alh_data = &alh_copier->data; node_type =SOF_IPC4_GET_NODE_TYPE (alh_data->gtw_cfg.node_id);
Signature · 1 line
2.47.1
Mark Brown
maintainerQuoted 1 line · Peter Ujfalusi
Fixes 0e357b529053 ("ASoC: SOF: ipc4-topology: add SoundWire/ALH aggregation support")
This commit is not in mainline.
Mark Brown
maintainerQuoted 8 lines · Peter Ujfalusi
Other, non DAI copier widgets could have the same stream name (sname) as the ALH copier and in that case the
copier->datais NULL, noalh_datais attached, which could lead to NULL pointer dereference.
We could check for this NULL pointer insof_ipc4_prepare_copier_module()and avoid the crash, but a similar loop insof_ipc4_widget_setup_comp_dai()will miscalculate the ALH device count, causing broken audio.[...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next
Thanks!
[1/1] ASoC: SOF: ipc4-topology: Harden loops for looking up ALH copiers
commit: 6fd60136d256b3b948333ebdb3835f41a95ab7ef
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark