aboutsummaryrefslogtreecommitdiffstats
path: root/fs/exec.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/exec.c')
-rw-r--r--fs/exec.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/exec.c b/fs/exec.c
index 1d6243d9f2b6..6be2aa0ab26f 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -1340,10 +1340,15 @@ void setup_new_exec(struct linux_binprm * bprm)
1340 * avoid bad behavior from the prior rlimits. This has to 1340 * avoid bad behavior from the prior rlimits. This has to
1341 * happen before arch_pick_mmap_layout(), which examines 1341 * happen before arch_pick_mmap_layout(), which examines
1342 * RLIMIT_STACK, but after the point of no return to avoid 1342 * RLIMIT_STACK, but after the point of no return to avoid
1343 * needing to clean up the change on failure. 1343 * races from other threads changing the limits. This also
1344 * must be protected from races with prlimit() calls.
1344 */ 1345 */
1346 task_lock(current->group_leader);
1345 if (current->signal->rlim[RLIMIT_STACK].rlim_cur > _STK_LIM) 1347 if (current->signal->rlim[RLIMIT_STACK].rlim_cur > _STK_LIM)
1346 current->signal->rlim[RLIMIT_STACK].rlim_cur = _STK_LIM; 1348 current->signal->rlim[RLIMIT_STACK].rlim_cur = _STK_LIM;
1349 if (current->signal->rlim[RLIMIT_STACK].rlim_max > _STK_LIM)
1350 current->signal->rlim[RLIMIT_STACK].rlim_max = _STK_LIM;
1351 task_unlock(current->group_leader);
1347 } 1352 }
1348 1353
1349 arch_pick_mmap_layout(current->mm); 1354 arch_pick_mmap_layout(current->mm);