From: Hillf Danton Date: Wed, 29 Dec 2010 13:55:28 +0000 (+0800) Subject: fix freeing user_struct in user cache X-Git-Tag: v2.6.36.3~32 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=c9009e7208be5a127d302a63602af1a6f15b17d9;p=karo-tx-linux.git fix freeing user_struct in user cache commit 4ef9e11d6867f88951e30db910fa015300e31871 upstream. 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 Acked-by: Serge Hallyn Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- diff --git a/kernel/user.c b/kernel/user.c index 7e72614b736d..8ce395f74d47 100644 --- a/kernel/user.c +++ b/kernel/user.c @@ -157,6 +157,7 @@ struct user_struct *alloc_uid(struct user_namespace *ns, uid_t uid) spin_lock_irq(&uidhash_lock); up = uid_hash_find(uid, hashent); if (up) { + put_user_ns(ns); key_put(new->uid_keyring); key_put(new->session_keyring); kmem_cache_free(uid_cachep, new);