#include <linux/nsproxy.h>
 #include <linux/err.h>
 
+struct user_namespace;
+extern struct user_namespace init_user_ns;
+
 struct uts_namespace {
        struct kref kref;
        struct new_utsname name;
+       struct user_namespace *user_ns;
 };
 extern struct uts_namespace init_uts_ns;
 
 
                .machine        = UTS_MACHINE,
                .domainname     = UTS_DOMAINNAME,
        },
+       .user_ns = &init_user_ns,
 };
 EXPORT_SYMBOL_GPL(init_uts_ns);
 
 
                err = PTR_ERR(new_nsp->uts_ns);
                goto out_uts;
        }
+       if (new_nsp->uts_ns != tsk->nsproxy->uts_ns) {
+               put_user_ns(new_nsp->uts_ns->user_ns);
+               new_nsp->uts_ns->user_ns = task_cred_xxx(tsk, user)->user_ns;
+               get_user_ns(new_nsp->uts_ns->user_ns);
+       }
 
        new_nsp->ipc_ns = copy_ipcs(flags, tsk->nsproxy->ipc_ns);
        if (IS_ERR(new_nsp->ipc_ns)) {
 
 #include <linux/module.h>
 #include <linux/user_namespace.h>
 
+/*
+ * userns count is 1 for root user, 1 for init_uts_ns,
+ * and 1 for... ?
+ */
 struct user_namespace init_user_ns = {
        .kref = {
-               .refcount       = ATOMIC_INIT(2),
+               .refcount       = ATOMIC_INIT(3),
        },
        .creator = &root_user,
 };
  */
 static DEFINE_SPINLOCK(uidhash_lock);
 
-/* root_user.__count is 2, 1 for init task cred, 1 for init_user_ns->creator */
+/* root_user.__count is 2, 1 for init task cred, 1 for init_user_ns->user_ns */
 struct user_struct root_user = {
        .__count        = ATOMIC_INIT(2),
        .processes      = ATOMIC_INIT(1),
 
 #include <linux/utsname.h>
 #include <linux/err.h>
 #include <linux/slab.h>
+#include <linux/user_namespace.h>
 
 static struct uts_namespace *create_uts_ns(void)
 {
 
        down_read(&uts_sem);
        memcpy(&ns->name, &old_ns->name, sizeof(ns->name));
+       ns->user_ns = old_ns->user_ns;
+       get_user_ns(ns->user_ns);
        up_read(&uts_sem);
        return ns;
 }
        struct uts_namespace *ns;
 
        ns = container_of(kref, struct uts_namespace, kref);
+       put_user_ns(ns->user_ns);
        kfree(ns);
 }