ASoC: wm0010: fix memory leak
authorSudip Mukherjee <sudipm.mukherjee@gmail.com>
Tue, 1 Sep 2015 05:44:05 +0000 (11:14 +0530)
committerMark Brown <broonie@kernel.org>
Tue, 1 Sep 2015 13:10:50 +0000 (14:10 +0100)
We were aborting if the kzalloc of img_swap fails but without freeing the
already allocated out. Similarly we were aborting if spi_sync fails
without releasing out and img_swap.

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm0010.c

index 6560a66b3f3539ea79cfd8d9ef20f3825d2e03df..9d370a45abe837061eaf963d82a9e93edc06a3cf 100644 (file)
@@ -672,8 +672,10 @@ static int wm0010_boot(struct snd_soc_codec *codec)
                }
 
                img_swap = kzalloc(len, GFP_KERNEL | GFP_DMA);
-               if (!img_swap)
+               if (!img_swap) {
+                       kfree(out);
                        goto abort;
+               }
 
                /* We need to re-order for 0010 */
                byte_swap_64((u64 *)&pll_rec, img_swap, len);
@@ -690,6 +692,8 @@ static int wm0010_boot(struct snd_soc_codec *codec)
                ret = spi_sync(spi, &m);
                if (ret != 0) {
                        dev_err(codec->dev, "First PLL write failed: %d\n", ret);
+                       kfree(img_swap);
+                       kfree(out);
                        goto abort;
                }
 
@@ -697,6 +701,8 @@ static int wm0010_boot(struct snd_soc_codec *codec)
                ret = spi_sync(spi, &m);
                if (ret != 0) {
                        dev_err(codec->dev, "Second PLL write failed: %d\n", ret);
+                       kfree(img_swap);
+                       kfree(out);
                        goto abort;
                }