On Tue, 15 Nov 2022 10:37:12 +0800 Zeng Heng <zengheng4@xxxxxxxxxx> 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@xxxxxxxxxx> 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);