aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/user.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/user.c')
-rw-r--r--kernel/user.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/user.c b/kernel/user.c
index 7e72614b736d..9e03e9c1df8d 100644
--- a/kernel/user.c
+++ b/kernel/user.c
@@ -17,9 +17,13 @@
17#include <linux/module.h> 17#include <linux/module.h>
18#include <linux/user_namespace.h> 18#include <linux/user_namespace.h>
19 19
20/*
21 * userns count is 1 for root user, 1 for init_uts_ns,
22 * and 1 for... ?
23 */
20struct user_namespace init_user_ns = { 24struct user_namespace init_user_ns = {
21 .kref = { 25 .kref = {
22 .refcount = ATOMIC_INIT(2), 26 .refcount = ATOMIC_INIT(3),
23 }, 27 },
24 .creator = &root_user, 28 .creator = &root_user,
25}; 29};
@@ -47,7 +51,7 @@ static struct kmem_cache *uid_cachep;
47 */ 51 */
48static DEFINE_SPINLOCK(uidhash_lock); 52static DEFINE_SPINLOCK(uidhash_lock);
49 53
50/* root_user.__count is 2, 1 for init task cred, 1 for init_user_ns->creator */ 54/* root_user.__count is 2, 1 for init task cred, 1 for init_user_ns->user_ns */
51struct user_struct root_user = { 55struct user_struct root_user = {
52 .__count = ATOMIC_INIT(2), 56 .__count = ATOMIC_INIT(2),
53 .processes = ATOMIC_INIT(1), 57 .processes = ATOMIC_INIT(1),
@@ -91,6 +95,7 @@ static struct user_struct *uid_hash_find(uid_t uid, struct hlist_head *hashent)
91 * upon function exit. 95 * upon function exit.
92 */ 96 */
93static void free_user(struct user_struct *up, unsigned long flags) 97static void free_user(struct user_struct *up, unsigned long flags)
98 __releases(&uidhash_lock)
94{ 99{
95 uid_hash_remove(up); 100 uid_hash_remove(up);
96 spin_unlock_irqrestore(&uidhash_lock, flags); 101 spin_unlock_irqrestore(&uidhash_lock, flags);
@@ -157,6 +162,7 @@ struct user_struct *alloc_uid(struct user_namespace *ns, uid_t uid)
157 spin_lock_irq(&uidhash_lock); 162 spin_lock_irq(&uidhash_lock);
158 up = uid_hash_find(uid, hashent); 163 up = uid_hash_find(uid, hashent);
159 if (up) { 164 if (up) {
165 put_user_ns(ns);
160 key_put(new->uid_keyring); 166 key_put(new->uid_keyring);
161 key_put(new->session_keyring); 167 key_put(new->session_keyring);
162 kmem_cache_free(uid_cachep, new); 168 kmem_cache_free(uid_cachep, new);