Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c2b36129 authored by Colin Ian King's avatar Colin Ian King Committed by Mark Brown
Browse files

ASoC: topology: kfree kcontrol->private_value before freeing kcontrol



kcontrol->private_value is being kfree'd after kcontrol has been freed
(in previous call to snd_ctl_remove).  Instead, fix this by kfreeing
the private_value before kcontrol.

CoverityScan CID#1388311 "Read from pointer after free"

Fixes: eea3dd4f ("ASoC: topology: Only free TLV for volume mixers of a widget")
Signed-off-by: default avatarColin Ian King <colin.king@canonical.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent a5de5b74
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -514,13 +514,12 @@ static void remove_widget(struct snd_soc_component *comp,
			    == SND_SOC_TPLG_TYPE_MIXER)
				kfree(kcontrol->tlv.p);

			snd_ctl_remove(card, kcontrol);

			/* Private value is used as struct soc_mixer_control
			 * for volume mixers or soc_bytes_ext for bytes
			 * controls.
			 */
			kfree((void *)kcontrol->private_value);
			snd_ctl_remove(card, kcontrol);
		}
		kfree(w->kcontrol_news);
	}