ASoC: core: Fix obscure leak of runtime array
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 14 Mar 2012 20:18:49 +0000 (20:18 +0000)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 15 Mar 2012 14:28:25 +0000 (14:28 +0000)
We're currently not freeing card->rtd in cases where the card is
unregistered before being instantiated - convert it to devm_kzalloc() to
make sure that happens.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Acked-by: Liam Girdwood <lrg@ti.com>
sound/soc/soc-core.c

index 93a0daac50889b1041a5e6fffd69f98d23c12829..a4deebc0801ab2e8ec5f3864b3cd1d1dc9aa7780 100644 (file)
@@ -1686,7 +1686,6 @@ static int soc_cleanup_card_resources(struct snd_soc_card *card)
 
        snd_soc_dapm_free(&card->dapm);
 
-       kfree(card->rtd);
        snd_card_free(card->snd_card);
        return 0;
 
@@ -3112,9 +3111,10 @@ int snd_soc_register_card(struct snd_soc_card *card)
 
        soc_init_card_debugfs(card);
 
-       card->rtd = kzalloc(sizeof(struct snd_soc_pcm_runtime) *
-                           (card->num_links + card->num_aux_devs),
-                           GFP_KERNEL);
+       card->rtd = devm_kzalloc(card->dev,
+                                sizeof(struct snd_soc_pcm_runtime) *
+                                (card->num_links + card->num_aux_devs),
+                                GFP_KERNEL);
        if (card->rtd == NULL)
                return -ENOMEM;
        card->rtd_aux = &card->rtd[card->num_links];