diff options
author | Kees Cook <keescook@chromium.org> | 2017-07-18 18:25:35 -0400 |
---|---|---|
committer | Kees Cook <keescook@chromium.org> | 2017-08-01 15:03:14 -0400 |
commit | 64701dee4178eb4a771b8b36cd86560f5b0e2460 (patch) | |
tree | 1a0012699f1c5ba4fb7909eb0db75aaf10168e7a | |
parent | 473d89639db0aaa0799616b397584ba4f58cd8e1 (diff) |
exec: Use sane stack rlimit under secureexec
For a secureexec, before memory layout selection has happened, reset the
stack rlimit to something sane to avoid the caller having control over
the resulting layouts.
$ ulimit -s
8192
$ ulimit -s unlimited
$ /bin/sh -c 'ulimit -s'
unlimited
$ sudo /bin/sh -c 'ulimit -s'
8192
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Reviewed-by: James Morris <james.l.morris@oracle.com>
Acked-by: Serge Hallyn <serge@hallyn.com>
-rw-r--r-- | fs/exec.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -1350,6 +1350,18 @@ void setup_new_exec(struct linux_binprm * bprm) | |||
1350 | */ | 1350 | */ |
1351 | bprm->secureexec |= bprm->cap_elevated; | 1351 | bprm->secureexec |= bprm->cap_elevated; |
1352 | 1352 | ||
1353 | if (bprm->secureexec) { | ||
1354 | /* | ||
1355 | * For secureexec, reset the stack limit to sane default to | ||
1356 | * avoid bad behavior from the prior rlimits. This has to | ||
1357 | * happen before arch_pick_mmap_layout(), which examines | ||
1358 | * RLIMIT_STACK, but after the point of no return to avoid | ||
1359 | * needing to clean up the change on failure. | ||
1360 | */ | ||
1361 | if (current->signal->rlim[RLIMIT_STACK].rlim_cur > _STK_LIM) | ||
1362 | current->signal->rlim[RLIMIT_STACK].rlim_cur = _STK_LIM; | ||
1363 | } | ||
1364 | |||
1353 | arch_pick_mmap_layout(current->mm); | 1365 | arch_pick_mmap_layout(current->mm); |
1354 | 1366 | ||
1355 | current->sas_ss_sp = current->sas_ss_size = 0; | 1367 | current->sas_ss_sp = current->sas_ss_size = 0; |