]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: SOF: topology: Use kmemdup_array instead of kmemdup for multiple allocation
authorShen Lichuan <shenlichuan@vivo.com>
Mon, 26 Aug 2024 05:44:02 +0000 (13:44 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 26 Aug 2024 14:52:35 +0000 (15:52 +0100)
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: Shen Lichuan <shenlichuan@vivo.com>
Link: https://patch.msgid.link/20240826054402.58396-1-shenlichuan@vivo.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/topology.c

index b5438213199163d305aba29cc7b94e3c9ade5a43..996c3234eaeeee795002e58e2f016c2b1d5e57d6 100644 (file)
@@ -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,9 +1889,9 @@ 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,
-                                   GFP_KERNEL);
+       slink->hw_configs = kmemdup_array(cfg->hw_config,
+                                         slink->num_hw_configs, sizeof(*slink->hw_configs),
+                                         GFP_KERNEL);
        if (!slink->hw_configs) {
                kfree(slink);
                return -ENOMEM;