Unverified Commit 5a30862d authored by Cássio Gabriel's avatar Cássio Gabriel Committed by Mark Brown
Browse files

ASoC: sdw_utils: Check speaker component string allocation



devm_kasprintf() can fail while building the temporary speaker
component string. If that happens, spk_components is set to NULL, but
the current code can still pass it to strlen() on a later loop iteration
or after the loop when appending the speaker component list to
card->components.

Use NULL to represent the initial "no speaker components" state, and
return -ENOMEM immediately if building spk_components fails.

Fixes: 0f60ecff ("ASoC: sdw_utils: generate combined spk components string")
Signed-off-by: default avatarCássio Gabriel <cassiogabrielcontato@gmail.com>
Link: https://patch.msgid.link/20260512-asoc-sdw-utils-spk-components-alloc-v1-1-c9bbd6d2e123@gmail.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 8b7c5cc7
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -1114,7 +1114,7 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
	struct asoc_sdw_codec_info *codec_info;
	struct snd_soc_dai *dai;
	struct sdw_slave *sdw_peripheral;
	const char *spk_components="";
	const char *spk_components = NULL;
	int dai_index;
	int ret;
	int i;
@@ -1197,7 +1197,7 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
			else
				component = codec_info->dais[dai_index].component_name;

			if (strlen (spk_components) == 0)
			if (!spk_components)
				spk_components =
					devm_kasprintf(card->dev, GFP_KERNEL, "%s", component);
			else
@@ -1205,13 +1205,15 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
				spk_components =
					devm_kasprintf(card->dev, GFP_KERNEL,
						       "%s+%s", spk_components, component);

			if (!spk_components)
				return -ENOMEM;
		}

		codec_info->dais[dai_index].rtd_init_done = true;

	}

	if (strlen (spk_components) > 0) {
	if (spk_components) {
		/* Update card components for speaker components */
		card->components = devm_kasprintf(card->dev, GFP_KERNEL, "%s spk:%s",
						  card->components, spk_components);