summaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-topology.c
diff options
context:
space:
mode:
authorRanjani Sridharan2019-04-05 04:48:33 +0200
committerMark Brown2019-04-08 08:37:35 +0200
commit54f8844e3f6cf898450a6c85f70fa997f0aa72b9 (patch)
treeec913bc751c3d97d4400c0114de4bdcabf4808d0 /sound/soc/soc-topology.c
parentASoC: intel: skylake: add remove() callback for component driver (diff)
downloadkernel-qcow2-linux-54f8844e3f6cf898450a6c85f70fa997f0aa72b9.tar.gz
kernel-qcow2-linux-54f8844e3f6cf898450a6c85f70fa997f0aa72b9.tar.xz
kernel-qcow2-linux-54f8844e3f6cf898450a6c85f70fa997f0aa72b9.zip
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: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/soc-topology.c')
-rw-r--r--sound/soc/soc-topology.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c
index 25fca7055464..96852d250619 100644
--- a/sound/soc/soc-topology.c
+++ b/sound/soc/soc-topology.c
@@ -482,10 +482,11 @@ static void remove_widget(struct snd_soc_component *comp,
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++)
- kfree(dobj->control.dtexts[j]);
- kfree(dobj->control.dtexts);
+ kfree(se->dobj.control.dtexts[j]);
+ kfree(se->dobj.control.dtexts);
kfree(se);
kfree(w->kcontrol_news[i].name);