diff options
Diffstat (limited to 'fs/exec.c')
-rw-r--r-- | fs/exec.c | 8 |
1 files changed, 7 insertions, 1 deletions
@@ -885,6 +885,12 @@ int flush_old_exec(struct linux_binprm * bprm) | |||
885 | current->flags &= ~PF_RANDOMIZE; | 885 | current->flags &= ~PF_RANDOMIZE; |
886 | flush_thread(); | 886 | flush_thread(); |
887 | 887 | ||
888 | /* Set the new mm task size. We have to do that late because it may | ||
889 | * depend on TIF_32BIT which is only updated in flush_thread() on | ||
890 | * some architectures like powerpc | ||
891 | */ | ||
892 | current->mm->task_size = TASK_SIZE; | ||
893 | |||
888 | if (bprm->e_uid != current->euid || bprm->e_gid != current->egid || | 894 | if (bprm->e_uid != current->euid || bprm->e_gid != current->egid || |
889 | file_permission(bprm->file, MAY_READ) || | 895 | file_permission(bprm->file, MAY_READ) || |
890 | (bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP)) { | 896 | (bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP)) { |
@@ -1403,7 +1409,7 @@ static void zap_threads (struct mm_struct *mm) | |||
1403 | do_each_thread(g,p) { | 1409 | do_each_thread(g,p) { |
1404 | if (mm == p->mm && p != tsk && | 1410 | if (mm == p->mm && p != tsk && |
1405 | p->ptrace && p->parent->mm == mm) { | 1411 | p->ptrace && p->parent->mm == mm) { |
1406 | __ptrace_unlink(p); | 1412 | __ptrace_detach(p, 0); |
1407 | } | 1413 | } |
1408 | } while_each_thread(g,p); | 1414 | } while_each_thread(g,p); |
1409 | write_unlock_irq(&tasklist_lock); | 1415 | write_unlock_irq(&tasklist_lock); |