On 2022-10-20 22:20, Yang Yingliang wrote: > The previous discussion link: > https://lore.kernel.org/lkml/0db486eb-6927-927e-3629-958f8f211194@xxxxxxxxxx/T/ The very first discussion on this was here: https://www.spinics.net/lists/dri-devel/msg368077.html Please use this link, and not the that one up there you which quoted above, and whose commit description is taken verbatim from the this link. > > kset_register() is currently used in some places without calling > kset_put() in error path, because the callers think it should be > kset internal thing to do, but the driver core can not know what > caller doing with that memory at times. The memory could be freed > both in kset_put() and error path of caller, if it is called in > kset_register(). As I explained in the link above, the reason there's a memory leak is that one cannot call kset_register() without the kset->kobj.name being set--kobj_add_internal() returns -EINVAL, in this case, i.e. kset_register() fails with -EINVAL. Thus, the most common usage is something like this: kobj_set_name(&kset->kobj, format, ...); kset->kobj.kset = parent_kset; kset->kobj.ktype = ktype; res = kset_register(kset); So, what is being leaked, is the memory allocated in kobj_set_name(), by the common idiom shown above. This needs to be mentioned in the documentation, at least, in case, in the future this is absolved in kset_register() redesign, etc. Regards, Luben > > So make the function documentation more explicit about calling > kset_put() in the error path of caller first, so that people > have a chance to know what to do here, then fixes this leaks > by calling kset_put() from callers. > > Liu Shixin (1): > ubifs: Fix memory leak in ubifs_sysfs_init() > > Yang Yingliang (10): > kset: fix documentation for kset_register() > kset: add null pointer check in kset_put() > bus: fix possible memory leak in bus_register() > kobject: fix possible memory leak in kset_create_and_add() > class: fix possible memory leak in __class_register() > firmware: qemu_fw_cfg: fix possible memory leak in > fw_cfg_build_symlink() > f2fs: fix possible memory leak in f2fs_init_sysfs() > erofs: fix possible memory leak in erofs_init_sysfs() > ocfs2: possible memory leak in mlog_sys_init() > drm/amdgpu/discovery: fix possible memory leak > > drivers/base/bus.c | 4 +++- > drivers/base/class.c | 6 ++++++ > drivers/firmware/qemu_fw_cfg.c | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 5 +++-- > fs/erofs/sysfs.c | 4 +++- > fs/f2fs/sysfs.c | 4 +++- > fs/ocfs2/cluster/masklog.c | 7 ++++++- > fs/ubifs/sysfs.c | 2 ++ > include/linux/kobject.h | 3 ++- > lib/kobject.c | 5 ++++- > 10 files changed, 33 insertions(+), 9 deletions(-) >