Messages in this thread Patch in this message | | | Date | Sat, 19 Apr 2003 14:35:19 -0700 | From | Andrew Morton <> | Subject | Re: Private namespaces |
| |
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/
| |