On Fri, Feb 04, 2022 at 01:30:08AM +0800, Miaoqian Lin wrote: > kobject_init_and_add() takes reference even when it fails. > According to the doc of kobject_init_and_add(): > > If this function returns an error, kobject_put() must be called to > properly clean up the memory associated with the object. > > Fix memory leak by calling kobject_put(). > > Fixes: c2e5df616e1a ("vmbus: add per-channel sysfs info") > Signed-off-by: Miaoqian Lin <linmq006@xxxxxxxxx> > --- > Changes in v2: > - Add cleanup when sysfs_create_group() fails > > kobject_uevent() is used for notifying userspace by sending an uevent, > I don't think we need to do error handling for it. Thanks for the patch. It looks good to me. Reviewed-by: Juan Vazquez <juvazq@xxxxxxxxxxxxxxxxxxx> > --- > drivers/hv/vmbus_drv.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index 17bf55fe3169..34a4fd21bdf5 100644 > --- a/drivers/hv/vmbus_drv.c > +++ b/drivers/hv/vmbus_drv.c > @@ -2028,8 +2028,10 @@ int vmbus_add_channel_kobj(struct hv_device *dev, struct vmbus_channel *channel) > kobj->kset = dev->channels_kset; > ret = kobject_init_and_add(kobj, &vmbus_chan_ktype, NULL, > "%u", relid); > - if (ret) > + if (ret) { > + kobject_put(kobj); > return ret; > + } > > ret = sysfs_create_group(kobj, &vmbus_chan_group); > > @@ -2038,6 +2040,7 @@ int vmbus_add_channel_kobj(struct hv_device *dev, struct vmbus_channel *channel) > * The calling functions' error handling paths will cleanup the > * empty channel directory. > */ > + kobject_put(kobj); > dev_err(device, "Unable to set up channel sysfs files\n"); > return ret; > } > -- > 2.25.1