From: Kees Cook <keescook@chromium.org> To: Thomas Gleixner <tglx@linutronix.de> Cc: Kees Cook <keescook@chromium.org>, Elena Reshetova <elena.reshetova@intel.com>, x86@kernel.org, Andy Lutomirski <luto@kernel.org>, Peter Zijlstra <peterz@infradead.org>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>, Mark Rutland <mark.rutland@arm.com>, Alexander Potapenko <glider@google.com>, Ard Biesheuvel <ard.biesheuvel@linaro.org>, Jann Horn <jannh@google.com>, "Perla, Enrico" <enrico.perla@intel.com>, kernel-hardening@lists.openwall.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 5/5] arm64: entry: Enable random_kstack_offset support Date: Tue, 24 Mar 2020 13:32:31 -0700 [thread overview] Message-ID: <20200324203231.64324-6-keescook@chromium.org> (raw) In-Reply-To: <20200324203231.64324-1-keescook@chromium.org> Allow for a randomized stack offset on a per-syscall basis, with roughly 5 bits of entropy. Signed-off-by: Kees Cook <keescook@chromium.org> --- arch/arm64/Kconfig | 1 + arch/arm64/kernel/syscall.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 0b30e884e088..4d5aa4959f72 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -127,6 +127,7 @@ config ARM64 select HAVE_ARCH_MMAP_RND_BITS select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT select HAVE_ARCH_PREL32_RELOCATIONS + select HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_STACKLEAK select HAVE_ARCH_THREAD_STRUCT_WHITELIST diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c index a12c0c88d345..238dbd753b44 100644 --- a/arch/arm64/kernel/syscall.c +++ b/arch/arm64/kernel/syscall.c @@ -5,6 +5,7 @@ #include <linux/errno.h> #include <linux/nospec.h> #include <linux/ptrace.h> +#include <linux/randomize_kstack.h> #include <linux/syscalls.h> #include <asm/daifflags.h> @@ -42,6 +43,8 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno, { long ret; + add_random_kstack_offset(); + if (scno < sc_nr) { syscall_fn_t syscall_fn; syscall_fn = syscall_table[array_index_nospec(scno, sc_nr)]; @@ -51,6 +54,13 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno, } regs->regs[0] = ret; + + /* + * Since the compiler chooses a 4 bit alignment for the stack, + * let's save one additional bit (9 total), which gets us up + * near 5 bits of entropy. + */ + choose_random_kstack_offset(get_random_int() & 0x1FF); } static inline bool has_syscall_work(unsigned long flags) -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Kees Cook <keescook@chromium.org> To: Thomas Gleixner <tglx@linutronix.de> Cc: Mark Rutland <mark.rutland@arm.com>, Kees Cook <keescook@chromium.org>, Jann Horn <jannh@google.com>, Ard Biesheuvel <ard.biesheuvel@linaro.org>, Peter Zijlstra <peterz@infradead.org>, Catalin Marinas <catalin.marinas@arm.com>, x86@kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Alexander Potapenko <glider@google.com>, linux-arm-kernel@lists.infradead.org, Andy Lutomirski <luto@kernel.org>, kernel-hardening@lists.openwall.com, "Perla, Enrico" <enrico.perla@intel.com>, Will Deacon <will@kernel.org>, Elena Reshetova <elena.reshetova@intel.com> Subject: [PATCH v2 5/5] arm64: entry: Enable random_kstack_offset support Date: Tue, 24 Mar 2020 13:32:31 -0700 [thread overview] Message-ID: <20200324203231.64324-6-keescook@chromium.org> (raw) In-Reply-To: <20200324203231.64324-1-keescook@chromium.org> Allow for a randomized stack offset on a per-syscall basis, with roughly 5 bits of entropy. Signed-off-by: Kees Cook <keescook@chromium.org> --- arch/arm64/Kconfig | 1 + arch/arm64/kernel/syscall.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index 0b30e884e088..4d5aa4959f72 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -127,6 +127,7 @@ config ARM64 select HAVE_ARCH_MMAP_RND_BITS select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT select HAVE_ARCH_PREL32_RELOCATIONS + select HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET select HAVE_ARCH_SECCOMP_FILTER select HAVE_ARCH_STACKLEAK select HAVE_ARCH_THREAD_STRUCT_WHITELIST diff --git a/arch/arm64/kernel/syscall.c b/arch/arm64/kernel/syscall.c index a12c0c88d345..238dbd753b44 100644 --- a/arch/arm64/kernel/syscall.c +++ b/arch/arm64/kernel/syscall.c @@ -5,6 +5,7 @@ #include <linux/errno.h> #include <linux/nospec.h> #include <linux/ptrace.h> +#include <linux/randomize_kstack.h> #include <linux/syscalls.h> #include <asm/daifflags.h> @@ -42,6 +43,8 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno, { long ret; + add_random_kstack_offset(); + if (scno < sc_nr) { syscall_fn_t syscall_fn; syscall_fn = syscall_table[array_index_nospec(scno, sc_nr)]; @@ -51,6 +54,13 @@ static void invoke_syscall(struct pt_regs *regs, unsigned int scno, } regs->regs[0] = ret; + + /* + * Since the compiler chooses a 4 bit alignment for the stack, + * let's save one additional bit (9 total), which gets us up + * near 5 bits of entropy. + */ + choose_random_kstack_offset(get_random_int() & 0x1FF); } static inline bool has_syscall_work(unsigned long flags) -- 2.20.1 _______________________________________________ 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:[~2020-03-24 20:32 UTC|newest] Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-03-24 20:32 [PATCH v2 0/5] Optionally randomize kernel stack offset each syscall Kees Cook 2020-03-24 20:32 ` Kees Cook 2020-03-24 20:32 ` [PATCH v2 1/5] jump_label: Provide CONFIG-driven build state defaults Kees Cook 2020-03-24 20:32 ` Kees Cook 2020-03-24 22:06 ` Peter Zijlstra 2020-03-24 22:06 ` Peter Zijlstra 2020-03-24 20:32 ` [PATCH v2 2/5] init_on_alloc: Unpessimize default-on builds Kees Cook 2020-03-24 20:32 ` Kees Cook 2020-03-26 15:48 ` Alexander Potapenko 2020-03-26 15:48 ` Alexander Potapenko 2020-03-26 15:48 ` Alexander Potapenko 2020-03-24 20:32 ` [PATCH v2 3/5] stack: Optionally randomize kernel stack offset each syscall Kees Cook 2020-03-24 20:32 ` Kees Cook 2020-03-30 11:25 ` Mark Rutland 2020-03-30 11:25 ` Mark Rutland 2020-03-30 18:18 ` Kees Cook 2020-03-30 18:18 ` Kees Cook 2020-03-30 18:27 ` Kees Cook 2020-03-30 18:27 ` Kees Cook 2020-03-24 20:32 ` [PATCH v2 4/5] x86/entry: Enable random_kstack_offset support Kees Cook 2020-03-24 20:32 ` Kees Cook 2020-03-28 22:26 ` Kees Cook 2020-03-28 22:26 ` Kees Cook 2020-03-24 20:32 ` Kees Cook [this message] 2020-03-24 20:32 ` [PATCH v2 5/5] arm64: entry: " Kees Cook 2020-03-25 13:21 ` Mark Rutland 2020-03-25 13:21 ` Mark Rutland 2020-03-25 20:22 ` Kees Cook 2020-03-25 20:22 ` Kees Cook 2020-03-26 11:15 ` Mark Rutland 2020-03-26 11:15 ` Mark Rutland 2020-03-26 16:31 ` Kees Cook 2020-03-26 16:31 ` Kees Cook 2020-03-30 11:26 ` Mark Rutland 2020-03-30 11:26 ` Mark Rutland 2020-04-20 20:54 ` Will Deacon 2020-04-20 20:54 ` Will Deacon 2020-04-20 22:34 ` Kees Cook 2020-04-20 22:34 ` Kees Cook 2020-04-21 7:02 ` Will Deacon 2020-04-21 7:02 ` Will Deacon 2020-03-24 21:28 ` [PATCH v2 0/5] Optionally randomize kernel stack offset each syscall Jann Horn 2020-03-24 21:28 ` Jann Horn 2020-03-24 21:28 ` Jann Horn 2020-03-24 23:07 ` Kees Cook 2020-03-24 23:07 ` Kees Cook 2020-03-25 12:15 ` Reshetova, Elena 2020-03-25 12:15 ` Reshetova, Elena 2020-03-25 12:15 ` Reshetova, Elena 2020-03-25 20:27 ` Kees Cook 2020-03-25 20:27 ` Kees Cook 2020-03-25 20:27 ` Kees Cook 2020-03-25 23:20 ` Jann Horn 2020-03-25 23:20 ` Jann Horn 2020-03-25 23:20 ` Jann Horn 2020-03-26 17:18 ` Kees Cook 2020-03-26 17:18 ` Kees Cook 2020-03-26 17:18 ` Kees Cook
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=20200324203231.64324-6-keescook@chromium.org \ --to=keescook@chromium.org \ --cc=ard.biesheuvel@linaro.org \ --cc=catalin.marinas@arm.com \ --cc=elena.reshetova@intel.com \ --cc=enrico.perla@intel.com \ --cc=glider@google.com \ --cc=jannh@google.com \ --cc=kernel-hardening@lists.openwall.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=luto@kernel.org \ --cc=mark.rutland@arm.com \ --cc=peterz@infradead.org \ --cc=tglx@linutronix.de \ --cc=will@kernel.org \ --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.