瀏覽代碼

fix freeing user_struct in user cache

When racing on adding into user cache, the new allocated from mm slab
is freed without putting user namespace.

Since the user namespace is already operated by getting, putting has
to be issued.

Signed-off-by: Hillf Danton <dhillf@gmail.com>
Acked-by: Serge Hallyn <serge@hallyn.com>
Cc: stable@kernel.org
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Hillf Danton 14 年之前
父節點
當前提交
4ef9e11d68
共有 1 個文件被更改,包括 1 次插入0 次删除
  1. 1 0
      kernel/user.c

+ 1 - 0
kernel/user.c

@@ -158,6 +158,7 @@ struct user_struct *alloc_uid(struct user_namespace *ns, uid_t uid)
 		spin_lock_irq(&uidhash_lock);
 		spin_lock_irq(&uidhash_lock);
 		up = uid_hash_find(uid, hashent);
 		up = uid_hash_find(uid, hashent);
 		if (up) {
 		if (up) {
+			put_user_ns(ns);
 			key_put(new->uid_keyring);
 			key_put(new->uid_keyring);
 			key_put(new->session_keyring);
 			key_put(new->session_keyring);
 			kmem_cache_free(uid_cachep, new);
 			kmem_cache_free(uid_cachep, new);