Thread (29 messages) flat view 29 messages, 5 authors, 2016-04-19
STALE3794d

Revision v1 of 6 in this series.

Revisions (6)
  1. v1 [diff vs current]
  2. v1 [diff vs current]
  3. v1 [diff vs current]
  4. v1 current
  5. v1 [diff vs current]
  6. v1 [diff vs current]

[PATCH RFT 1/5] iio: mxs-lradc: fix memory leak

From: Stefan Wahren <hidden>
Date: 2016-04-18 06:19:16
Also in: linux-iio

Hi Marek,

Am 14.04.2016 um 22:01 schrieb Marek Vasut:
On 04/14/2016 05:48 PM, Stefan Wahren wrote:
quoted
After successful touchscreen registration the input device was
never freed. So fix this issue by using devm_input_allocate_device().

Signed-off-by: Stefan Wahren <redacted>
---
 drivers/iio/adc/mxs-lradc.c |    8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/drivers/iio/adc/mxs-lradc.c b/drivers/iio/adc/mxs-lradc.c
index 33051b8..0576953 100644
--- a/drivers/iio/adc/mxs-lradc.c
+++ b/drivers/iio/adc/mxs-lradc.c
@@ -1109,12 +1109,11 @@ static int mxs_lradc_ts_register(struct mxs_lradc *lradc)
 {
 	struct input_dev *input;
 	struct device *dev = lradc->dev;
-	int ret;
 
 	if (!lradc->use_touchscreen)
 		return 0;
 
-	input = input_allocate_device();
+	input = devm_input_allocate_device(dev);
 	if (!input)
 		return -ENOMEM;
 
@@ -1134,11 +1133,8 @@ static int mxs_lradc_ts_register(struct mxs_lradc *lradc)
 
 	lradc->ts_input = input;
 	input_set_drvdata(input, lradc);
-	ret = input_register_device(input);
-	if (ret)
-		input_free_device(lradc->ts_input);
 
-	return ret;
+	return input_register_device(input);
 }
 
 static void mxs_lradc_ts_unregister(struct mxs_lradc *lradc)
Nice find.

Looks like at91_adc.c and exynos_adc.c suffer from the exact same issue.
The leak looks a bit more severe on exynos even, exynos_adc_ts_init()
could use a proper fail path. Do you want to send patches or shall I ?
since you found them it would be better if you handle them.

Regards
Stefan
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help