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:
parent
bde8b3887a
commit
05bdcf1290
|
@ -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 */
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue