ASoC: Fix leak of rtd in soc_bind_dai_link
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Thu, 11 Aug 2016 13:39:00 +0000 (14:39 +0100)
committerMark Brown <broonie@kernel.org>
Thu, 11 Aug 2016 14:00:44 +0000 (15:00 +0100)
If we fail to find a platform we simply return EPROBE_DEFER,
but we have allocated the rtd pointer. All error paths before
soc_add_pcm_runtime need to call soc_free_pcm_runtime first to
avoid leaking the rtd pointer. A suitable error path already
exists and is used else where in the function so simply use that
here as well.

Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-core.c

index 16369ca..b0e23db 100644 (file)
@@ -1056,7 +1056,7 @@ static int soc_bind_dai_link(struct snd_soc_card *card,
        if (!rtd->platform) {
                dev_err(card->dev, "ASoC: platform %s not registered\n",
                        dai_link->platform_name);
-               return -EPROBE_DEFER;
+               goto _err_defer;
        }
 
        soc_add_pcm_runtime(card, rtd);