From: Ali Saidi <alisaidi@amazon.com> To: <linux-kernel@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <x86@kernel.org> Cc: "H. Peter Anvin" <hpa@zytor.com>, Andrew Morton <akpm@linux-foundation.org>, Ali Saidi <alisaidi@amazon.com>, Kees Cook <keescook@chromium.org>, Borislav Petkov <bp@alien8.de>, Ingo Molnar <mingo@redhat.com>, Thomas Gleixner <tglx@linutronix.de>, Peter Zijlstra <peterz@infradead.org>, Andy Lutomirski <luto@kernel.org>, Dave Hansen <dave.hansen@linux.intel.com>, Will Deacon <will.deacon@arm.com>, "Catalin Marinas" <catalin.marinas@arm.com>, David Woodhouse <dwmw@amazon.co.uk>, Anthony Liguori <aliguori@amazon.com> Subject: [PATCH 1/2] arm64/mmap: handle worst-case heap randomization in mmap_base Date: Tue, 12 Mar 2019 17:32:47 +0000 [thread overview] Message-ID: <20190312173248.13490-2-alisaidi@amazon.com> (raw) In-Reply-To: <20190312173248.13490-1-alisaidi@amazon.com> Increase mmap_base by the worst-case brk randomization so that the stack and heap remain apart. In Linux 4.13 a change was committed that special cased the kernel ELF loader when the loader is invoked directly (eab09532d400; binfmt_elf: use ELF_ET_DYN_BASE only for PIE). Generally, the loader isn’t invoked directly and this issue is limited to cases where it is, (e.g to set a non-inheritable LD_LIBRARY_PATH, testing new versions of the loader). In those rare cases, the loader doesn't take into account the amount of brk randomization that will be applied by arch_randomize_brk(). This can lead to the stack and heap being arbitrarily close to each other. Signed-off-by: Ali Saidi <alisaidi@amazon.com> --- arch/arm64/mm/mmap.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c index 842c8a5fcd53..0778f7ba8306 100644 --- a/arch/arm64/mm/mmap.c +++ b/arch/arm64/mm/mmap.c @@ -67,6 +67,14 @@ static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack) unsigned long gap = rlim_stack->rlim_cur; unsigned long pad = (STACK_RND_MASK << PAGE_SHIFT) + stack_guard_gap; + /* Provide space for randomization when randomize_va_space == 2 and + * ld-linux.so is called directly. Values from arch_randomize_brk() + */ + if (test_thread_flag(TIF_32BIT)) + pad += SZ_32M; + else + pad += SZ_1G; + /* Values close to RLIM_INFINITY can overflow. */ if (gap + pad > gap) gap += pad; -- 2.15.3.AMZN
WARNING: multiple messages have this Message-ID (diff)
From: Ali Saidi <alisaidi@amazon.com> To: <linux-kernel@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>, <x86@kernel.org> Cc: Kees Cook <keescook@chromium.org>, Peter Zijlstra <peterz@infradead.org>, Catalin Marinas <catalin.marinas@arm.com>, Dave Hansen <dave.hansen@linux.intel.com>, Will Deacon <will.deacon@arm.com>, Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>, David Woodhouse <dwmw@amazon.co.uk>, Andy Lutomirski <luto@kernel.org>, "H. Peter Anvin" <hpa@zytor.com>, Andrew Morton <akpm@linux-foundation.org>, Thomas Gleixner <tglx@linutronix.de>, Ali Saidi <alisaidi@amazon.com>, Anthony Liguori <aliguori@amazon.com> Subject: [PATCH 1/2] arm64/mmap: handle worst-case heap randomization in mmap_base Date: Tue, 12 Mar 2019 17:32:47 +0000 [thread overview] Message-ID: <20190312173248.13490-2-alisaidi@amazon.com> (raw) In-Reply-To: <20190312173248.13490-1-alisaidi@amazon.com> Increase mmap_base by the worst-case brk randomization so that the stack and heap remain apart. In Linux 4.13 a change was committed that special cased the kernel ELF loader when the loader is invoked directly (eab09532d400; binfmt_elf: use ELF_ET_DYN_BASE only for PIE). Generally, the loader isn’t invoked directly and this issue is limited to cases where it is, (e.g to set a non-inheritable LD_LIBRARY_PATH, testing new versions of the loader). In those rare cases, the loader doesn't take into account the amount of brk randomization that will be applied by arch_randomize_brk(). This can lead to the stack and heap being arbitrarily close to each other. Signed-off-by: Ali Saidi <alisaidi@amazon.com> --- arch/arm64/mm/mmap.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c index 842c8a5fcd53..0778f7ba8306 100644 --- a/arch/arm64/mm/mmap.c +++ b/arch/arm64/mm/mmap.c @@ -67,6 +67,14 @@ static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack) unsigned long gap = rlim_stack->rlim_cur; unsigned long pad = (STACK_RND_MASK << PAGE_SHIFT) + stack_guard_gap; + /* Provide space for randomization when randomize_va_space == 2 and + * ld-linux.so is called directly. Values from arch_randomize_brk() + */ + if (test_thread_flag(TIF_32BIT)) + pad += SZ_32M; + else + pad += SZ_1G; + /* Values close to RLIM_INFINITY can overflow. */ if (gap + pad > gap) gap += pad; -- 2.15.3.AMZN _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-03-12 17:33 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-03-12 17:32 [PATCH 0/2] handle worst-case heap randomization in mmap_base Ali Saidi 2019-03-12 17:32 ` Ali Saidi 2019-03-12 17:32 ` Ali Saidi [this message] 2019-03-12 17:32 ` [PATCH 1/2] arm64/mmap: " Ali Saidi 2019-03-12 17:32 ` [PATCH 2/2] x86/mmap: " Ali Saidi 2019-03-12 17:32 ` Ali Saidi 2019-03-13 16:25 ` Dave Hansen 2019-03-13 16:25 ` Dave Hansen 2019-03-17 15:52 ` Saidi, Ali 2019-03-17 15:52 ` Saidi, Ali 2019-03-13 22:58 ` Kees Cook 2019-03-13 22:58 ` Kees Cook 2019-03-27 19:51 ` Kees Cook 2019-03-27 19:51 ` Kees Cook 2019-04-15 16:03 ` Saidi, Ali 2019-04-15 16:03 ` Saidi, Ali 2019-04-19 8:51 ` Ingo Molnar 2019-04-19 8:51 ` Ingo Molnar 2019-04-19 15:00 ` Kees Cook 2019-04-19 15:00 ` Kees Cook 2019-03-21 14:09 ` Thomas Gleixner 2019-03-21 14:09 ` Thomas Gleixner 2019-03-26 2:13 ` Saidi, Ali 2019-03-26 2:13 ` Saidi, Ali 2019-03-26 8:43 ` Thomas Gleixner 2019-03-26 8:43 ` Thomas Gleixner
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190312173248.13490-2-alisaidi@amazon.com \ --to=alisaidi@amazon.com \ --cc=akpm@linux-foundation.org \ --cc=aliguori@amazon.com \ --cc=bp@alien8.de \ --cc=catalin.marinas@arm.com \ --cc=dave.hansen@linux.intel.com \ --cc=dwmw@amazon.co.uk \ --cc=hpa@zytor.com \ --cc=keescook@chromium.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=luto@kernel.org \ --cc=mingo@redhat.com \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ --cc=will.deacon@arm.com \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.