Commit 54f8844e authored by Ranjani Sridharan's avatar Ranjani Sridharan Committed by Mark Brown

ASoC: topology: Use the correct dobj to free enum control values and texts

The control values and texts of the enum kcontrol associated
with a widget need to be freed when the widget is removed.
However, both struct snd_soc_dapm_widget and struct soc_enum
contain a dobj member, which resulted in a confusion.
The existing code generates a null pointer dereference by
attempting to free the values and texts from the dobj which
belongs to the widget instead of the dobj belonging to the
enum kcontrol.

The suggested fix is to use the correct dobj member (se->dobj)
of the enum kcontrol.
Signed-off-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 2e05ddd2
...@@ -482,10 +482,11 @@ static void remove_widget(struct snd_soc_component *comp, ...@@ -482,10 +482,11 @@ static void remove_widget(struct snd_soc_component *comp,
snd_ctl_remove(card, kcontrol); snd_ctl_remove(card, kcontrol);
kfree(dobj->control.dvalues); /* free enum kcontrol's dvalues and dtexts */
kfree(se->dobj.control.dvalues);
for (j = 0; j < se->items; j++) for (j = 0; j < se->items; j++)
kfree(dobj->control.dtexts[j]); kfree(se->dobj.control.dtexts[j]);
kfree(dobj->control.dtexts); kfree(se->dobj.control.dtexts);
kfree(se); kfree(se);
kfree(w->kcontrol_news[i].name); kfree(w->kcontrol_news[i].name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment