ASoC: topology: Check widget kcontrols before deref.

Validate the topology input before we dereference the pointer.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Liam Girdwood 2018-03-14 20:42:40 +00:00 committed by Mark Brown
parent bde8b3887a
commit 05bdcf1290
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
1 changed files with 7 additions and 2 deletions

View File

@ -504,6 +504,9 @@ static void remove_widget(struct snd_soc_component *comp,
if (dobj->ops && dobj->ops->widget_unload)
dobj->ops->widget_unload(comp, dobj);
if (!w->kcontrols)
goto free_news;
/*
* Dynamic Widgets either have 1..N enum kcontrols or mixers.
* The enum may either have an array of values or strings.
@ -524,7 +527,6 @@ static void remove_widget(struct snd_soc_component *comp,
kfree(se);
}
kfree(w->kcontrol_news);
} else {
/* volume mixer or bytes controls */
for (i = 0; i < w->num_kcontrols; i++) {
@ -541,8 +543,11 @@ static void remove_widget(struct snd_soc_component *comp,
kfree((void *)kcontrol->private_value);
snd_ctl_remove(card, kcontrol);
}
kfree(w->kcontrol_news);
}
free_news:
kfree(w->kcontrol_news);
/* widget w is freed by soc-dapm.c */
}