The following patch modifies create_new_namespaces() to also use the 
errors returned by the copy_*_ns routines and not to systematically 
return ENOMEM.

Signed-off-by: Cedric Le Goater <[EMAIL PROTECTED]>
Cc: Serge E. Hallyn <[EMAIL PROTECTED]>
Cc: Badari Pulavarty <[EMAIL PROTECTED]>
Cc: Pavel Emelianov <[EMAIL PROTECTED]>
Cc: Herbert Poetzl <[EMAIL PROTECTED]>
Cc: Eric W. Biederman <[EMAIL PROTECTED]>
---
 kernel/nsproxy.c |   23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

Index: 2.6.22-rc4-mm2/kernel/nsproxy.c
===================================================================
--- 2.6.22-rc4-mm2.orig/kernel/nsproxy.c
+++ 2.6.22-rc4-mm2/kernel/nsproxy.c
@@ -58,30 +58,41 @@ static struct nsproxy *create_new_namesp
                        struct fs_struct *new_fs)
 {
        struct nsproxy *new_nsp;
+       int err;
 
        new_nsp = clone_nsproxy(tsk->nsproxy);
        if (!new_nsp)
                return ERR_PTR(-ENOMEM);
 
        new_nsp->mnt_ns = copy_mnt_ns(flags, tsk->nsproxy->mnt_ns, new_fs);
-       if (IS_ERR(new_nsp->mnt_ns))
+       if (IS_ERR(new_nsp->mnt_ns)) {
+               err = PTR_ERR(new_nsp->mnt_ns);
                goto out_ns;
+       }
 
        new_nsp->uts_ns = copy_utsname(flags, tsk->nsproxy->uts_ns);
-       if (IS_ERR(new_nsp->uts_ns))
+       if (IS_ERR(new_nsp->uts_ns)) {
+               err = PTR_ERR(new_nsp->uts_ns);
                goto out_uts;
+       }
 
        new_nsp->ipc_ns = copy_ipcs(flags, tsk->nsproxy->ipc_ns);
-       if (IS_ERR(new_nsp->ipc_ns))
+       if (IS_ERR(new_nsp->ipc_ns)) {
+               err = PTR_ERR(new_nsp->ipc_ns);
                goto out_ipc;
+       }
 
        new_nsp->pid_ns = copy_pid_ns(flags, tsk->nsproxy->pid_ns);
-       if (IS_ERR(new_nsp->pid_ns))
+       if (IS_ERR(new_nsp->pid_ns)) {
+               err = PTR_ERR(new_nsp->pid_ns);
                goto out_pid;
+       }
 
        new_nsp->user_ns = copy_user_ns(flags, tsk->nsproxy->user_ns);
-       if (IS_ERR(new_nsp->user_ns))
+       if (IS_ERR(new_nsp->user_ns)) {
+               err = PTR_ERR(new_nsp->user_ns);
                goto out_user;
+       }
 
        return new_nsp;
 
@@ -99,7 +110,7 @@ out_uts:
                put_mnt_ns(new_nsp->mnt_ns);
 out_ns:
        kfree(new_nsp);
-       return ERR_PTR(-ENOMEM);
+       return ERR_PTR(err);
 }
 
 /*
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to