ASoC: topology: Fix a potential NULL pointer dereference in 'soc_tplg_dapm_widget_den...
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Thu, 14 Sep 2017 20:44:12 +0000 (22:44 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 14 Sep 2017 21:13:03 +0000 (14:13 -0700)
if 'se = kzalloc()' fails in the 'for' loop, we will branch to 'err'.
But in this case, 'kc[i].private_value' will still be NULL. A NULL pointer
dereference will then occur is the error handling path.

In such a case, it is safe to just 'continue' in order to skip this entry
and free the other ones.

Fixes: 1a7dd6e2f192 ("ASoC: topology: Allow a widget to have multiple enum controls")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-topology.c

index dd471d2..2499b54 100644 (file)
@@ -1378,6 +1378,9 @@ err_se:
        for (; i >= 0; i--) {
                /* free values and texts */
                se = (struct soc_enum *)kc[i].private_value;
+               if (!se)
+                       continue;
+
                kfree(se->dobj.control.dvalues);
                for (j = 0; j < ec->items; j++)
                        kfree(se->dobj.control.dtexts[j]);