| From f2dc342bc402bb9009df918b738dce63ff5a89fc Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 19 Aug 2021 22:48:08 +0200 |
| Subject: i2c: xlr: Fix a resource leak in the error handling path of |
| 'xlr_i2c_probe()' |
| |
| From: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| |
| [ Upstream commit 7f98960c046ee1136e7096aee168eda03aef8a5d ] |
| |
| A successful 'clk_prepare()' call should be balanced by a corresponding |
| 'clk_unprepare()' call in the error handling path of the probe, as already |
| done in the remove function. |
| |
| More specifically, 'clk_prepare_enable()' is used, but 'clk_disable()' is |
| also already called. So just the unprepare step has still to be done. |
| |
| Update the error handling path accordingly. |
| |
| Fixes: 75d31c2372e4 ("i2c: xlr: add support for Sigma Designs controller variant") |
| Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| Signed-off-by: Wolfram Sang <wsa@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/i2c/busses/i2c-xlr.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/i2c/busses/i2c-xlr.c b/drivers/i2c/busses/i2c-xlr.c |
| index 34cd4b3085402..dda6cb848405b 100644 |
| --- a/drivers/i2c/busses/i2c-xlr.c |
| +++ b/drivers/i2c/busses/i2c-xlr.c |
| @@ -433,11 +433,15 @@ static int xlr_i2c_probe(struct platform_device *pdev) |
| i2c_set_adapdata(&priv->adap, priv); |
| ret = i2c_add_numbered_adapter(&priv->adap); |
| if (ret < 0) |
| - return ret; |
| + goto err_unprepare_clk; |
| |
| platform_set_drvdata(pdev, priv); |
| dev_info(&priv->adap.dev, "Added I2C Bus.\n"); |
| return 0; |
| + |
| +err_unprepare_clk: |
| + clk_unprepare(clk); |
| + return ret; |
| } |
| |
| static int xlr_i2c_remove(struct platform_device *pdev) |
| -- |
| 2.33.0 |
| |