lkml.org 
[lkml]   [2019]   [Oct]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 154/185] binfmt_elf: Do not move brk for INTERP-less ET_EXEC
    Date
    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/binfmt_elf.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/fs/binfmt_elf.c
    +++ b/fs/binfmt_elf.c
    @@ -1123,7 +1123,8 @@ static int load_elf_binary(struct linux_
    * (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;


    \
     
     \ /
      Last update: 2019-10-03 18:13    [W:4.145 / U:0.892 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site