Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sysdev: fix problem with sysdev_class being re-registered

We need to initialize the kobject for a sysdev_class as it could have
been recycled (stupid static kobjects...)

We also do the same thing in case sysdev devices are being
re-registered.

Thanks to Balaji Rao <balajirrao@gmail.com> for pointing out the
problem.

Signed-off-by: Balaji Rao <balajirrao@gmail.com>
Tested-by: Mikael Pettersson <mikpe@it.uu.se>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

+4
+4
drivers/base/sys.c
··· 133 133 pr_debug("Registering sysdev class '%s'\n", 134 134 kobject_name(&cls->kset.kobj)); 135 135 INIT_LIST_HEAD(&cls->drivers); 136 + memset(&cls->kset.kobj, 0x00, sizeof(struct kobject)); 136 137 cls->kset.kobj.parent = &system_kset->kobj; 137 138 cls->kset.kobj.ktype = &ktype_sysdev_class; 138 139 cls->kset.kobj.kset = system_kset; ··· 227 226 return -EINVAL; 228 227 229 228 pr_debug("Registering sys device '%s'\n", kobject_name(&sysdev->kobj)); 229 + 230 + /* initialize the kobject to 0, in case it had previously been used */ 231 + memset(&sysdev->kobj, 0x00, sizeof(struct kobject)); 230 232 231 233 /* Make sure the kset is set */ 232 234 sysdev->kobj.kset = &cls->kset;