All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH for 4.4, 4.9] binfmt_elf: Do not move brk for INTERP-less ET_EXEC
@ 2020-05-13  8:59 Nobuhiro Iwamatsu
  2020-05-13  9:15 ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: Nobuhiro Iwamatsu @ 2020-05-13  8:59 UTC (permalink / raw)
  To: stable
  Cc: gregkh, Kees Cook, Richard Kojedzinszky, Linus Torvalds,
	Nobuhiro Iwamatsu

From: Kees Cook <keescook@chromium.org>

commit 7be3cb019db1cbd5fd5ffe6d64a23fefa4b6f229 upstream.

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: Richard Kojedzinszky <richard@kojedz.in>
Fixes: bbdc6076d2e5 ("binfmt_elf: move brk out of mmap when doing direct loader exec")
Cc: stable@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
---
 fs/binfmt_elf.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index a6857e9bd4460..164e5fedd7b6a 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -1104,7 +1104,8 @@ static int load_elf_binary(struct linux_binprm *bprm)
 		 * (since it grows up, and may collide early with the stack
 		 * 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 =
 				ELF_ET_DYN_BASE;
 
-- 
2.26.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH for 4.4, 4.9] binfmt_elf: Do not move brk for INTERP-less ET_EXEC
  2020-05-13  8:59 [PATCH for 4.4, 4.9] binfmt_elf: Do not move brk for INTERP-less ET_EXEC Nobuhiro Iwamatsu
@ 2020-05-13  9:15 ` Greg KH
  0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2020-05-13  9:15 UTC (permalink / raw)
  To: Nobuhiro Iwamatsu; +Cc: stable, Kees Cook, Richard Kojedzinszky, Linus Torvalds

On Wed, May 13, 2020 at 05:59:32PM +0900, Nobuhiro Iwamatsu wrote:
> From: Kees Cook <keescook@chromium.org>
> 
> commit 7be3cb019db1cbd5fd5ffe6d64a23fefa4b6f229 upstream.
> 
> 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: Richard Kojedzinszky <richard@kojedz.in>
> Fixes: bbdc6076d2e5 ("binfmt_elf: move brk out of mmap when doing direct loader exec")
> Cc: stable@vger.kernel.org
> Signed-off-by: Kees Cook <keescook@chromium.org>
> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>

Already queued up a few hours ago, thanks.

greg k-h

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-05-13  9:15 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-13  8:59 [PATCH for 4.4, 4.9] binfmt_elf: Do not move brk for INTERP-less ET_EXEC Nobuhiro Iwamatsu
2020-05-13  9:15 ` Greg KH

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.