[PATCH] i2c-imx: Fix memory leak in i2c_fsl_probe()

Andrey Smirnov andrew.smirnov at gmail.com
Fri Aug 14 13:31:59 PDT 2015


All points of failure in the code of i2c_fsl_probe() happen after the
allocation of i2c_fsl, so all of them have to perform necessary
cleanup setups in case of failure.

Signed-off-by: Andrey Smirnov <andrew.smirnov at gmail.com>
---
 drivers/i2c/busses/i2c-imx.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 714e83c..4cd03e1 100644
--- a/drivers/i2c/busses/i2c-imx.c
+++ b/drivers/i2c/busses/i2c-imx.c
@@ -539,8 +539,10 @@ static int __init i2c_fsl_probe(struct device_d *pdev)

 #ifdef CONFIG_COMMON_CLK
 	i2c_fsl->clk = clk_get(pdev, NULL);
-	if (IS_ERR(i2c_fsl->clk))
-		return PTR_ERR(i2c_fsl->clk);
+	if (IS_ERR(i2c_fsl->clk)) {
+		ret = PTR_ERR(i2c_fsl->clk);
+		goto fail;
+	}
 #endif
 	/* Setup i2c_fsl driver structure */
 	i2c_fsl->adapter.master_xfer = i2c_fsl_xfer;
@@ -548,8 +550,10 @@ static int __init i2c_fsl_probe(struct device_d *pdev)
 	i2c_fsl->adapter.dev.parent = pdev;
 	i2c_fsl->adapter.dev.device_node = pdev->device_node;
 	i2c_fsl->base = dev_request_mem_region(pdev, 0);
-	if (IS_ERR(i2c_fsl->base))
-		return PTR_ERR(i2c_fsl->base);
+	if (IS_ERR(i2c_fsl->base)) {
+		ret = PTR_ERR(i2c_fsl->base);
+		goto fail;
+	}

 	i2c_fsl->dfsrr = -1;

--
2.1.4



More information about the barebox mailing list