summaryrefslogtreecommitdiff
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorColin Gibbs <colin@gibbs.dhs.org>2002-05-07 03:14:55 -0700
committerDavid S. Miller <davem@nuts.ninka.net>2002-05-07 03:14:55 -0700
commit902a0b68c814c9f7794dd206632177d4c323f3d0 (patch)
tree1db7be38c9c2b89150c31c977ef1862f1594b1d4 /kernel/fork.c
parent702d27c75ce9c624d4015ea61d1cec85e9d140a9 (diff)
copy_mm fix:
- If dup_mmap fails we will try to destroy_context before init_new_context occurs. Platforms with non-trivial init_new_context can explode because of this. The fix is to invoke init_new_context before dup_mmap.
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index 9c02ba5c4635..61a6c7799bb3 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -387,6 +387,9 @@ static int copy_mm(unsigned long clone_flags, struct task_struct * tsk)
if (!mm_init(mm))
goto fail_nomem;
+ if (init_new_context(tsk,mm))
+ goto free_pt;
+
down_write(&oldmm->mmap_sem);
retval = dup_mmap(mm);
up_write(&oldmm->mmap_sem);
@@ -394,9 +397,6 @@ static int copy_mm(unsigned long clone_flags, struct task_struct * tsk)
if (retval)
goto free_pt;
- if (init_new_context(tsk,mm))
- goto free_pt;
-
good_mm:
tsk->mm = mm;
tsk->active_mm = mm;