summaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
authorAndrey Smirnov <andrew.smirnov@gmail.com>2015-08-14 13:31:59 -0700
committerSascha Hauer <s.hauer@pengutronix.de>2015-08-19 16:23:54 +0200
commit1f6d1c00824de09501615eabad887885364aa800 (patch)
tree9c4e24b850bd5b238be8840dd20d0faedf811bb0 /drivers/i2c
parentc8a26925c974fa91c3a4e53f1a3bfd7bf57bcf98 (diff)
downloadbarebox-1f6d1c00824de09501615eabad887885364aa800.tar.gz
barebox-1f6d1c00824de09501615eabad887885364aa800.tar.xz
i2c-imx: Fix memory leak in i2c_fsl_probe()
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@gmail.com> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-imx.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c
index 714e83c4b9..4cd03e18a8 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;