iio: light: hid-sensor-prox: Fix memory leak in probe()
Subsystems (2)
PATCH v3 1/1 iio: light: hid-sensor-prox: Fix memory leak in probe()
From: Fabio Estevam <[email protected]>
'channels' is allocated via kmemdup and it is never freed.
Use 'indio_dev->channels' directly instead, so that we avoid such memory leak problem.
---
Build-tested only.
Changes since v2:
- Get rid of the channels and use indio_dev->channels instead.
drivers/iio/light/hid-sensor-prox.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/iio/light/hid-sensor-prox.c +5 -5
@@ -253,7 +253,6 @@ static int hid_prox_probe(struct platform_device *pdev)struct iio_dev *indio_dev;struct prox_state *prox_state;struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; -struct iio_chan_spec *channels; indio_dev =devm_iio_device_alloc (&pdev->dev,sizeof (struct prox_state ));
@@ -272,20 +271,21 @@ static int hid_prox_probe(struct platform_device *pdev)return ret; } - channels =kmemdup (prox_channels,sizeof (prox_channels),GFP_KERNEL ); -if (!channels) { + indio_dev->channels =kmemdup (prox_channels,sizeof (prox_channels), +GFP_KERNEL ); +if (!indio_dev->channels) {dev_err (&pdev->dev,"failed to duplicate channels\n" );return -ENOMEM ; } - ret =prox_parse_report (pdev, hsdev, channels, + ret =prox_parse_report (pdev, hsdev, + (struct iio_chan_spec *)indio_dev->channels,HID_USAGE_SENSOR_PROX , prox_state);if (ret) {dev_err (&pdev->dev,"failed to setup attributes\n" ); goto error_free_dev_mem; } - indio_dev->channels = channels; indio_dev->num_channels =ARRAY_SIZE (prox_channels); indio_dev->dev.parent = &pdev->dev;
Signature · 1 line
1.9.1
Quoted 10 lines · Fabio Estevam
From: Fabio Estevam <[email protected]>
'channels' is allocated via kmemdup and it is never freed.
Use '
indio_dev->channels' directly instead, so that we avoid such memory leak problem.Cc Srinivas Pandruvada <[email protected]>Reported-by Alexey Khoroshilov <[email protected]>Signed-off-by Fabio Estevam <[email protected]>
Quoted 47 lines
---
Build-tested only.Changes since v2:
- Get rid of the channels and useindio_dev->channelsinstead.drivers/iio/light/hid-sensor-prox.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)drivers/iio/light/hid-sensor-prox.c +5
-5@@ -253,7 +253,6 @@ static int hid_prox_probe(struct platform_device *pdev)struct iio_dev *indio_dev;struct prox_state *prox_state;struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; -struct iio_chan_spec *channels; indio_dev =devm_iio_device_alloc (&pdev->dev,sizeof (struct prox_state ));@@ -272,20 +271,21 @@ static int hid_prox_probe(struct platform_device *pdev)return ret; } - channels =kmemdup (prox_channels,sizeof (prox_channels),GFP_KERNEL ); -if (!channels) { + indio_dev->channels =kmemdup (prox_channels,sizeof (prox_channels), +GFP_KERNEL ); +if (!indio_dev->channels) {dev_err (&pdev->dev,"failed to duplicate channels\n" );return -ENOMEM ; } - ret =prox_parse_report (pdev, hsdev, channels, + ret =prox_parse_report (pdev, hsdev, + (struct iio_chan_spec *)indio_dev->channels,HID_USAGE_SENSOR_PROX , prox_state);if (ret) {dev_err (&pdev->dev,"failed to setup attributes\n" ); goto error_free_dev_mem; } - indio_dev->channels = channels; indio_dev->num_channels =ARRAY_SIZE (prox_channels); indio_dev->dev.parent = &pdev->dev;
Quoted 10 lines · Fabio Estevam
From: Fabio Estevam <[email protected]>
'channels' is allocated via kmemdup and it is never freed.
Use '
indio_dev->channels' directly instead, so that we avoid such memory leak problem.Cc Srinivas Pandruvada <[email protected]>Reported-by Alexey Khoroshilov <[email protected]>Signed-off-by Fabio Estevam <[email protected]>
Applied to the fixes-togreg branch of iio.git
Thanks,
Jonathan
Quoted 48 lines
---
Build-tested only.Changes since v2:
- Get rid of the channels and useindio_dev->channelsinstead.drivers/iio/light/hid-sensor-prox.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)drivers/iio/light/hid-sensor-prox.c +5
-5@@ -253,7 +253,6 @@ static int hid_prox_probe(struct platform_device *pdev)struct iio_dev *indio_dev;struct prox_state *prox_state;struct hid_sensor_hub_device *hsdev = pdev->dev.platform_data; -struct iio_chan_spec *channels; indio_dev =devm_iio_device_alloc (&pdev->dev,sizeof (struct prox_state ));@@ -272,20 +271,21 @@ static int hid_prox_probe(struct platform_device *pdev)return ret; } - channels =kmemdup (prox_channels,sizeof (prox_channels),GFP_KERNEL ); -if (!channels) { + indio_dev->channels =kmemdup (prox_channels,sizeof (prox_channels), +GFP_KERNEL ); +if (!indio_dev->channels) {dev_err (&pdev->dev,"failed to duplicate channels\n" );return -ENOMEM ; } - ret =prox_parse_report (pdev, hsdev, channels, + ret =prox_parse_report (pdev, hsdev, + (struct iio_chan_spec *)indio_dev->channels,HID_USAGE_SENSOR_PROX , prox_state);if (ret) {dev_err (&pdev->dev,"failed to setup attributes\n" ); goto error_free_dev_mem; } - indio_dev->channels = channels; indio_dev->num_channels =ARRAY_SIZE (prox_channels); indio_dev->dev.parent = &pdev->dev;