| From jejb@kernel.org Thu Oct 16 15:31:27 2008 |
| From: Alexey Dobriyan <adobriyan@gmail.com> |
| Date: Thu, 16 Oct 2008 22:05:10 GMT |
| Subject: modules: fix module "notes" kobject leak |
| To: jejb@kernel.org, stable@kernel.org |
| Message-ID: <200810162205.m9GM5A4T005941@hera.kernel.org> |
| |
| From: Alexey Dobriyan <adobriyan@gmail.com> |
| |
| commit e94320939f44e0cbaccc3f259a5778abced4949c upstream |
| |
| Fix "notes" kobject leak |
| |
| It happens every rmmod if KALLSYMS=y and SYSFS=y. |
| |
| # modprobe foo |
| |
| kobject: 'foo' (ffffffffa00743d0): kobject_add_internal: parent: 'module', set: 'module' |
| kobject: 'holders' (ffff88017e7c5770): kobject_add_internal: parent: 'foo', set: '<NULL>' |
| kobject: 'foo' (ffffffffa00743d0): kobject_uevent_env |
| kobject: 'foo' (ffffffffa00743d0): fill_kobj_path: path = '/module/foo' |
| kobject: 'notes' (ffff88017fa9b668): kobject_add_internal: parent: 'foo', set: '<NULL>' |
| ^^^^^ |
| |
| # rmmod foo |
| |
| kobject: 'holders' (ffff88017e7c5770): kobject_cleanup |
| kobject: 'holders' (ffff88017e7c5770): auto cleanup kobject_del |
| kobject: 'holders' (ffff88017e7c5770): calling ktype release |
| kobject: (ffff88017e7c5770): dynamic_kobj_release |
| kobject: 'holders': free name |
| kobject: 'foo' (ffffffffa00743d0): kobject_cleanup |
| kobject: 'foo' (ffffffffa00743d0): does not have a release() function, it is broken and must be fixed. |
| kobject: 'foo' (ffffffffa00743d0): auto cleanup 'remove' event |
| kobject: 'foo' (ffffffffa00743d0): kobject_uevent_env |
| kobject: 'foo' (ffffffffa00743d0): fill_kobj_path: path = '/module/foo' |
| kobject: 'foo' (ffffffffa00743d0): auto cleanup kobject_del |
| kobject: 'foo': free name |
| |
| [whooops] |
| |
| Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| kernel/module.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/kernel/module.c |
| +++ b/kernel/module.c |
| @@ -1143,7 +1143,7 @@ static void free_notes_attrs(struct modu |
| while (i-- > 0) |
| sysfs_remove_bin_file(notes_attrs->dir, |
| ¬es_attrs->attrs[i]); |
| - kobject_del(notes_attrs->dir); |
| + kobject_put(notes_attrs->dir); |
| } |
| kfree(notes_attrs); |
| } |