diff options
author | 2019-06-27 14:32:08 +0100 | |
---|---|---|
committer | 2019-06-28 15:08:49 +0100 | |
commit | 1ad741d0e8e8ecccc16aa9ccb8362575197d91bf (patch) | |
tree | 175baf6ff9f597824379ae65961bfe1491d15468 /sound/soc/soc-topology.c | |
parent | ASoC: atmel: atmel-pcm-dma.c: use devm_snd_dmaengine_pcm_register() (diff) | |
download | linux-1ad741d0e8e8ecccc16aa9ccb8362575197d91bf.tar.gz linux-1ad741d0e8e8ecccc16aa9ccb8362575197d91bf.tar.bz2 linux-1ad741d0e8e8ecccc16aa9ccb8362575197d91bf.zip |
ASoC: topology: fix memory leaks on sm, se and sbe
Currently when a kstrdup fails the error exit paths don't free
the allocations for sm, se and sbe. This can be fixed by assigning
kc[i].private_value to these before doing the ksrtdup so that the error
exit path will be able to free these objects.
Addresses-Coverity: ("Resource leak")
Fixes: 9f90af3a9952 ("ASoC: topology: Consolidate and fix asoc_tplg_dapm_widget_*_create flow")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/soc-topology.c')
-rw-r--r-- | sound/soc/soc-topology.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sound/soc/soc-topology.c b/sound/soc/soc-topology.c index fc1f1d6f9e92..dc463f1a9e24 100644 --- a/sound/soc/soc-topology.c +++ b/sound/soc/soc-topology.c @@ -1326,10 +1326,10 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dmixer_create( dev_dbg(tplg->dev, " adding DAPM widget mixer control %s at %d\n", mc->hdr.name, i); + kc[i].private_value = (long)sm; kc[i].name = kstrdup(mc->hdr.name, GFP_KERNEL); if (kc[i].name == NULL) goto err_sm; - kc[i].private_value = (long)sm; kc[i].iface = SNDRV_CTL_ELEM_IFACE_MIXER; kc[i].access = mc->hdr.access; @@ -1412,10 +1412,10 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_denum_create( dev_dbg(tplg->dev, " adding DAPM widget enum control %s\n", ec->hdr.name); + kc[i].private_value = (long)se; kc[i].name = kstrdup(ec->hdr.name, GFP_KERNEL); if (kc[i].name == NULL) goto err_se; - kc[i].private_value = (long)se; kc[i].iface = SNDRV_CTL_ELEM_IFACE_MIXER; kc[i].access = ec->hdr.access; @@ -1524,10 +1524,10 @@ static struct snd_kcontrol_new *soc_tplg_dapm_widget_dbytes_create( "ASoC: adding bytes kcontrol %s with access 0x%x\n", be->hdr.name, be->hdr.access); + kc[i].private_value = (long)sbe; kc[i].name = kstrdup(be->hdr.name, GFP_KERNEL); if (kc[i].name == NULL) goto err_sbe; - kc[i].private_value = (long)sbe; kc[i].iface = SNDRV_CTL_ELEM_IFACE_MIXER; kc[i].access = be->hdr.access; |