Message ID | 20221115023712.3726854-1-zengheng4@huawei.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | iio: fix memory leak in iio_device_register_eventset() | expand |
On Tue, 15 Nov 2022 10:37:12 +0800 Zeng Heng <zengheng4@huawei.com> wrote: > When iio_device_register_sysfs_group() returns failed, > iio_device_register_eventset() needs to free attrs array. > > Otherwise, kmemleak would scan & report memory leak as below: > > unreferenced object 0xffff88810a1cc3c0 (size 32): > comm "100-i2c-vcnl302", pid 728, jiffies 4295052307 (age 156.027s) > backtrace: > __kmalloc+0x46/0x1b0 > iio_device_register_eventset at drivers/iio/industrialio-event.c:541 > __iio_device_register at drivers/iio/industrialio-core.c:1959 > __devm_iio_device_register at drivers/iio/industrialio-core.c:2040 > > Fixes: 32f171724e5c ("iio: core: rework iio device group creation") > Signed-off-by: Zeng Heng <zengheng4@huawei.com> Good find. Applied to the fixes-togreg branch of iio.git. Thanks, Jonathan > --- > drivers/iio/industrialio-event.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c > index 3d78da2531a9..727e2ef66aa4 100644 > --- a/drivers/iio/industrialio-event.c > +++ b/drivers/iio/industrialio-event.c > @@ -556,7 +556,7 @@ int iio_device_register_eventset(struct iio_dev *indio_dev) > > ret = iio_device_register_sysfs_group(indio_dev, &ev_int->group); > if (ret) > - goto error_free_setup_event_lines; > + goto error_free_group_attrs; > > ev_int->ioctl_handler.ioctl = iio_event_ioctl; > iio_device_ioctl_handler_register(&iio_dev_opaque->indio_dev, > @@ -564,6 +564,8 @@ int iio_device_register_eventset(struct iio_dev *indio_dev) > > return 0; > > +error_free_group_attrs: > + kfree(ev_int->group.attrs); > error_free_setup_event_lines: > iio_free_chan_devattr_list(&ev_int->dev_attr_list); > kfree(ev_int);
diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c index 3d78da2531a9..727e2ef66aa4 100644 --- a/drivers/iio/industrialio-event.c +++ b/drivers/iio/industrialio-event.c @@ -556,7 +556,7 @@ int iio_device_register_eventset(struct iio_dev *indio_dev) ret = iio_device_register_sysfs_group(indio_dev, &ev_int->group); if (ret) - goto error_free_setup_event_lines; + goto error_free_group_attrs; ev_int->ioctl_handler.ioctl = iio_event_ioctl; iio_device_ioctl_handler_register(&iio_dev_opaque->indio_dev, @@ -564,6 +564,8 @@ int iio_device_register_eventset(struct iio_dev *indio_dev) return 0; +error_free_group_attrs: + kfree(ev_int->group.attrs); error_free_setup_event_lines: iio_free_chan_devattr_list(&ev_int->dev_attr_list); kfree(ev_int);
When iio_device_register_sysfs_group() returns failed, iio_device_register_eventset() needs to free attrs array. Otherwise, kmemleak would scan & report memory leak as below: unreferenced object 0xffff88810a1cc3c0 (size 32): comm "100-i2c-vcnl302", pid 728, jiffies 4295052307 (age 156.027s) backtrace: __kmalloc+0x46/0x1b0 iio_device_register_eventset at drivers/iio/industrialio-event.c:541 __iio_device_register at drivers/iio/industrialio-core.c:1959 __devm_iio_device_register at drivers/iio/industrialio-core.c:2040 Fixes: 32f171724e5c ("iio: core: rework iio device group creation") Signed-off-by: Zeng Heng <zengheng4@huawei.com> --- drivers/iio/industrialio-event.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)