spi: fsl-lib: Fix memory leak of pinfo
authorAxel Lin <axel.lin@ingics.com>
Thu, 20 Mar 2014 09:20:17 +0000 (17:20 +0800)
committerMark Brown <broonie@linaro.org>
Fri, 21 Mar 2014 18:12:03 +0000 (18:12 +0000)
of_mpc8xxx_spi_probe() allocates memory for pinfo but the memory is not freed
anywhere. of_mpc8xxx_spi_probe() is called in .probe() and pinfo should be
freed in .remove(), so convert kzalloc to devm_kzalloc to fix the memory leak.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/spi/spi-fsl-lib.c

index 0b75f26..e5d45fc 100644 (file)
@@ -200,7 +200,7 @@ int of_mpc8xxx_spi_probe(struct platform_device *ofdev)
        const void *prop;
        int ret = -ENOMEM;
 
-       pinfo = kzalloc(sizeof(*pinfo), GFP_KERNEL);
+       pinfo = devm_kzalloc(&ofdev->dev, sizeof(*pinfo), GFP_KERNEL);
        if (!pinfo)
                return -ENOMEM;
 
@@ -215,15 +215,13 @@ int of_mpc8xxx_spi_probe(struct platform_device *ofdev)
        pdata->sysclk = get_brgfreq();
        if (pdata->sysclk == -1) {
                pdata->sysclk = fsl_get_sys_freq();
-               if (pdata->sysclk == -1) {
-                       ret = -ENODEV;
-                       goto err;
-               }
+               if (pdata->sysclk == -1)
+                       return -ENODEV;
        }
 #else
        ret = of_property_read_u32(np, "clock-frequency", &pdata->sysclk);
        if (ret)
-               goto err;
+               return ret;
 #endif
 
        prop = of_get_property(np, "mode", NULL);
@@ -237,8 +235,4 @@ int of_mpc8xxx_spi_probe(struct platform_device *ofdev)
                pdata->flags = SPI_CPM_MODE | SPI_CPM1;
 
        return 0;
-
-err:
-       kfree(pinfo);
-       return ret;
 }