From 467e9f4b5086a60a5cb2e032ccaf4a31abadc4c2 Mon Sep 17 00:00:00 2001 From: Cedric Le Goater Date: Sun, 15 Jul 2007 23:41:06 -0700 Subject: fix create_new_namespaces() return value dup_mnt_ns() and clone_uts_ns() return NULL on failure. This is wrong, create_new_namespaces() uses ERR_PTR() to catch an error. This means that the subsequent create_new_namespaces() will hit BUG_ON() in copy_mnt_ns() or copy_utsname(). Modify create_new_namespaces() to also use the errors returned by the copy_*_ns routines and not to systematically return ENOMEM. [oleg@tv-sign.ru: better changelog] Signed-off-by: Cedric Le Goater Cc: Serge E. Hallyn Cc: Badari Pulavarty Cc: Pavel Emelianov Cc: Herbert Poetzl Cc: Eric W. Biederman Cc: Oleg Nesterov Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- kernel/user_namespace.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'kernel/user_namespace.c') diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c index 89a27e8b17f..d055d987850 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c @@ -34,7 +34,7 @@ static struct user_namespace *clone_user_ns(struct user_namespace *old_ns) ns = kmalloc(sizeof(struct user_namespace), GFP_KERNEL); if (!ns) - return NULL; + return ERR_PTR(-ENOMEM); kref_init(&ns->kref); @@ -45,7 +45,7 @@ static struct user_namespace *clone_user_ns(struct user_namespace *old_ns) ns->root_user = alloc_uid(ns, 0); if (!ns->root_user) { kfree(ns); - return NULL; + return ERR_PTR(-ENOMEM); } /* Reset current->user with a new one */ @@ -53,7 +53,7 @@ static struct user_namespace *clone_user_ns(struct user_namespace *old_ns) if (!new_user) { free_uid(ns->root_user); kfree(ns); - return NULL; + return ERR_PTR(-ENOMEM); } switch_uid(new_user); -- cgit v1.2.3