diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2015-08-14 13:31:59 -0700 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2015-08-19 16:23:54 +0200 |
commit | 1f6d1c00824de09501615eabad887885364aa800 (patch) | |
tree | 9c4e24b850bd5b238be8840dd20d0faedf811bb0 /drivers/i2c | |
parent | c8a26925c974fa91c3a4e53f1a3bfd7bf57bcf98 (diff) | |
download | barebox-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.c | 12 |
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; |