Commit 7be3cb01 authored by Kees Cook's avatar Kees Cook Committed by Linus Torvalds

binfmt_elf: Do not move brk for INTERP-less ET_EXEC

When brk was moved for binaries without an interpreter, it should have
been limited to ET_DYN only. In other words, the special case was an
ET_DYN that lacks an INTERP, not just an executable that lacks INTERP.
The bug manifested for giant static executables, where the brk would end
up in the middle of the text area on 32-bit architectures.
Reported-and-tested-by: default avatarRichard Kojedzinszky <richard@kojedz.in>
Fixes: bbdc6076 ("binfmt_elf: move brk out of mmap when doing direct loader exec")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 2268419e
...@@ -1121,7 +1121,8 @@ static int load_elf_binary(struct linux_binprm *bprm) ...@@ -1121,7 +1121,8 @@ static int load_elf_binary(struct linux_binprm *bprm)
* (since it grows up, and may collide early with the stack * (since it grows up, and may collide early with the stack
* growing down), and into the unused ELF_ET_DYN_BASE region. * growing down), and into the unused ELF_ET_DYN_BASE region.
*/ */
if (IS_ENABLED(CONFIG_ARCH_HAS_ELF_RANDOMIZE) && !interpreter) if (IS_ENABLED(CONFIG_ARCH_HAS_ELF_RANDOMIZE) &&
loc->elf_ex.e_type == ET_DYN && !interpreter)
current->mm->brk = current->mm->start_brk = current->mm->brk = current->mm->start_brk =
ELF_ET_DYN_BASE; ELF_ET_DYN_BASE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment