diff -NurpP --minimal linux-2.6.26.2-vs2.3.0.35-pre5/kernel/user.c linux-2.6.26.2-vs2.3.0.35/kernel/user.c --- linux-2.6.26.2-vs2.3.0.35-pre5/kernel/user.c 2008-07-16 22:41:36.000000000 -0400 +++ linux-2.6.26.2-vs2.3.0.35/kernel/user.c 2008-08-13 20:16:50.000000000 -0400 @@ -246,12 +246,14 @@ static struct kobj_type uids_ktype = { static int uids_user_create(struct user_namespace *ns, struct user_struct *up) { struct kobject *kobj = &up->kobj; - int error; + int error = 0; memset(kobj, 0, sizeof(struct kobject)); + if (ns != &init_user_ns) + goto done; + kobj->kset = uids_kset; - error = kobject_init_and_add(kobj, &uids_ktype, NULL, - "%p:%d", ns, up->uid); + error = kobject_init_and_add(kobj, &uids_ktype, NULL, "%d", up->uid); if (error) { kobject_put(kobj); goto done; @@ -303,9 +305,11 @@ static void remove_user_sysfs_dir(struct if (!remove_user) goto done; - kobject_uevent(&up->kobj, KOBJ_REMOVE); - kobject_del(&up->kobj); - kobject_put(&up->kobj); + if (up->kobj.name) { + kobject_uevent(&up->kobj, KOBJ_REMOVE); + kobject_del(&up->kobj); + kobject_put(&up->kobj); + } sched_destroy_user(up); key_put(up->uid_keyring);