Re: Private namespaces

From: Andrew Morton (akpm@digeo.com)
Date: Sat Apr 19 2003 - 16:35:19 EST


Andries Brouwer <aebr@win.tue.nl> wrote:
>
> Now you ask: but why ENOMEM?
> That is a tiny flaw in the kernel source.

That code's all fairly careless with its return values, isn't it?

How does this look?

 kernel/fork.c | 23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff -puN kernel/fork.c~clone-retval-fix kernel/fork.c
--- 25/kernel/fork.c~clone-retval-fix 2003-04-19 14:28:05.000000000 -0700
+++ 25-akpm/kernel/fork.c 2003-04-19 14:31:26.000000000 -0700
@@ -568,7 +568,7 @@ static inline int copy_fs(unsigned long
         }
         tsk->fs = __copy_fs_struct(current->fs);
         if (!tsk->fs)
- return -1;
+ return -ENOMEM;
         return 0;
 }
 
@@ -703,7 +703,7 @@ static inline int copy_sighand(unsigned
         sig = kmem_cache_alloc(sighand_cachep, GFP_KERNEL);
         tsk->sighand = sig;
         if (!sig)
- return -1;
+ return -ENOMEM;
         spin_lock_init(&sig->siglock);
         atomic_set(&sig->count, 1);
         memcpy(sig->action, current->sighand->action, sizeof(sig->action));
@@ -721,7 +721,7 @@ static inline int copy_signal(unsigned l
         sig = kmem_cache_alloc(signal_cachep, GFP_KERNEL);
         tsk->signal = sig;
         if (!sig)
- return -1;
+ return -ENOMEM;
         atomic_set(&sig->count, 1);
         sig->group_exit = 0;
         sig->group_exit_code = 0;
@@ -866,23 +866,22 @@ static struct task_struct *copy_process(
         p->security = NULL;
         p->as_io_context = NULL;
 
- retval = -ENOMEM;
- if (security_task_alloc(p))
+ if ((retval = security_task_alloc(p)))
                 goto bad_fork_cleanup;
         /* copy all the process information */
- if (copy_semundo(clone_flags, p))
+ if ((retval = copy_semundo(clone_flags, p)))
                 goto bad_fork_cleanup_security;
- if (copy_files(clone_flags, p))
+ if ((retval = copy_files(clone_flags, p)))
                 goto bad_fork_cleanup_semundo;
- if (copy_fs(clone_flags, p))
+ if ((retval = copy_fs(clone_flags, p)))
                 goto bad_fork_cleanup_files;
- if (copy_sighand(clone_flags, p))
+ if ((retval = copy_sighand(clone_flags, p)))
                 goto bad_fork_cleanup_fs;
- if (copy_signal(clone_flags, p))
+ if ((retval = copy_signal(clone_flags, p)))
                 goto bad_fork_cleanup_sighand;
- if (copy_mm(clone_flags, p))
+ if ((retval = copy_mm(clone_flags, p)))
                 goto bad_fork_cleanup_signal;
- if (copy_namespace(clone_flags, p))
+ if ((retval = copy_namespace(clone_flags, p)))
                 goto bad_fork_cleanup_mm;
         retval = copy_thread(0, clone_flags, stack_start, stack_size, p, regs);
         if (retval)

_

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Apr 23 2003 - 22:00:26 EST