diff options
| author | Colin Gibbs <colin@gibbs.dhs.org> | 2002-05-07 03:14:55 -0700 |
|---|---|---|
| committer | David S. Miller <davem@nuts.ninka.net> | 2002-05-07 03:14:55 -0700 |
| commit | 902a0b68c814c9f7794dd206632177d4c323f3d0 (patch) | |
| tree | 1db7be38c9c2b89150c31c977ef1862f1594b1d4 /kernel/fork.c | |
| parent | 702d27c75ce9c624d4015ea61d1cec85e9d140a9 (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.c | 6 |
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; |
