Unverified Commit 69a8d0ed authored by Shen Lichuan's avatar Shen Lichuan Committed by Mark Brown
Browse files

ASoC: SOF: topology: Use kmemdup_array instead of kmemdup for multiple allocation



Let the kmemdup_array() take care about multiplication
and possible overflows.

Using kmemdup_array() is more appropriate and makes the code
easier to audit.

Signed-off-by: default avatarShen Lichuan <shenlichuan@vivo.com>
Link: https://patch.msgid.link/20240826054402.58396-1-shenlichuan@vivo.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 0225d3b9
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1349,7 +1349,7 @@ static int sof_parse_pin_binding(struct snd_sof_widget *swidget,

	/* copy pin binding array to swidget only if it is defined in topology */
	if (pin_binding[0]) {
		pb = kmemdup(pin_binding, num_pins * sizeof(char *), GFP_KERNEL);
		pb = kmemdup_array(pin_binding, num_pins, sizeof(char *), GFP_KERNEL);
		if (!pb) {
			ret = -ENOMEM;
			goto err;
@@ -1889,8 +1889,8 @@ static int sof_link_load(struct snd_soc_component *scomp, int index, struct snd_
		return -ENOMEM;

	slink->num_hw_configs = le32_to_cpu(cfg->num_hw_configs);
	slink->hw_configs = kmemdup(cfg->hw_config,
				    sizeof(*slink->hw_configs) * slink->num_hw_configs,
	slink->hw_configs = kmemdup_array(cfg->hw_config,
					  slink->num_hw_configs, sizeof(*slink->hw_configs),
					  GFP_KERNEL);
	if (!slink->hw_configs) {
		kfree(slink);