Message ID | 20240625030502.68988-1-cuiyunhui@bytedance.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 048e2906d4caf57018e92f49c9a0f998ebb83f9b |
Headers | show |
Series | riscv: Randomize lower bits of stack address | expand |
Add punit in the loop. On Tue, Jun 25, 2024 at 11:05 AM Yunhui Cui <cuiyunhui@bytedance.com> wrote: > > Implement arch_align_stack() to randomize the lower bits > of the stack address. > > Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com> > --- > arch/riscv/include/asm/exec.h | 8 ++++++++ > arch/riscv/kernel/process.c | 9 +++++++++ > 2 files changed, 17 insertions(+) > create mode 100644 arch/riscv/include/asm/exec.h > > diff --git a/arch/riscv/include/asm/exec.h b/arch/riscv/include/asm/exec.h > new file mode 100644 > index 000000000000..07d9942682e0 > --- /dev/null > +++ b/arch/riscv/include/asm/exec.h > @@ -0,0 +1,8 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > + > +#ifndef __ASM_EXEC_H > +#define __ASM_EXEC_H > + > +extern unsigned long arch_align_stack(unsigned long sp); > + > +#endif /* __ASM_EXEC_H */ > diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c > index e4bc61c4e58a..e3142d8a6e28 100644 > --- a/arch/riscv/kernel/process.c > +++ b/arch/riscv/kernel/process.c > @@ -15,6 +15,7 @@ > #include <linux/tick.h> > #include <linux/ptrace.h> > #include <linux/uaccess.h> > +#include <linux/personality.h> > > #include <asm/unistd.h> > #include <asm/processor.h> > @@ -26,6 +27,7 @@ > #include <asm/cpuidle.h> > #include <asm/vector.h> > #include <asm/cpufeature.h> > +#include <asm/exec.h> > > #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK) > #include <linux/stackprotector.h> > @@ -99,6 +101,13 @@ void show_regs(struct pt_regs *regs) > dump_backtrace(regs, NULL, KERN_DEFAULT); > } > > +unsigned long arch_align_stack(unsigned long sp) > +{ > + if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space) > + sp -= get_random_u32_below(PAGE_SIZE); > + return sp & ~0xf; > +} > + > #ifdef CONFIG_COMPAT > static bool compat_mode_supported __read_mostly; > > -- > 2.20.1 > Thanks, Yunhui
A gentle ping, Any more comments on this patch? On Thu, Jul 11, 2024 at 2:09 PM yunhui cui <cuiyunhui@bytedance.com> wrote: > > Add punit in the loop. > > > On Tue, Jun 25, 2024 at 11:05 AM Yunhui Cui <cuiyunhui@bytedance.com> wrote: > > > > Implement arch_align_stack() to randomize the lower bits > > of the stack address. > > > > Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com> > > --- > > arch/riscv/include/asm/exec.h | 8 ++++++++ > > arch/riscv/kernel/process.c | 9 +++++++++ > > 2 files changed, 17 insertions(+) > > create mode 100644 arch/riscv/include/asm/exec.h > > > > diff --git a/arch/riscv/include/asm/exec.h b/arch/riscv/include/asm/exec.h > > new file mode 100644 > > index 000000000000..07d9942682e0 > > --- /dev/null > > +++ b/arch/riscv/include/asm/exec.h > > @@ -0,0 +1,8 @@ > > +/* SPDX-License-Identifier: GPL-2.0-only */ > > + > > +#ifndef __ASM_EXEC_H > > +#define __ASM_EXEC_H > > + > > +extern unsigned long arch_align_stack(unsigned long sp); > > + > > +#endif /* __ASM_EXEC_H */ > > diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c > > index e4bc61c4e58a..e3142d8a6e28 100644 > > --- a/arch/riscv/kernel/process.c > > +++ b/arch/riscv/kernel/process.c > > @@ -15,6 +15,7 @@ > > #include <linux/tick.h> > > #include <linux/ptrace.h> > > #include <linux/uaccess.h> > > +#include <linux/personality.h> > > > > #include <asm/unistd.h> > > #include <asm/processor.h> > > @@ -26,6 +27,7 @@ > > #include <asm/cpuidle.h> > > #include <asm/vector.h> > > #include <asm/cpufeature.h> > > +#include <asm/exec.h> > > > > #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK) > > #include <linux/stackprotector.h> > > @@ -99,6 +101,13 @@ void show_regs(struct pt_regs *regs) > > dump_backtrace(regs, NULL, KERN_DEFAULT); > > } > > > > +unsigned long arch_align_stack(unsigned long sp) > > +{ > > + if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space) > > + sp -= get_random_u32_below(PAGE_SIZE); > > + return sp & ~0xf; > > +} > > + > > #ifdef CONFIG_COMPAT > > static bool compat_mode_supported __read_mostly; > > > > -- > > 2.20.1 > > > > Thanks, > Yunhui Thanks, Yunhui
Hi Yunhui, On Thu, Aug 15, 2024 at 4:08 AM yunhui cui <cuiyunhui@bytedance.com> wrote: > > A gentle ping, Any more comments on this patch? I'm adding @Kees Cook in cc in case he has any. Thanks, Alex > > On Thu, Jul 11, 2024 at 2:09 PM yunhui cui <cuiyunhui@bytedance.com> wrote: > > > > Add punit in the loop. > > > > > > On Tue, Jun 25, 2024 at 11:05 AM Yunhui Cui <cuiyunhui@bytedance.com> wrote: > > > > > > Implement arch_align_stack() to randomize the lower bits > > > of the stack address. > > > > > > Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com> > > > --- > > > arch/riscv/include/asm/exec.h | 8 ++++++++ > > > arch/riscv/kernel/process.c | 9 +++++++++ > > > 2 files changed, 17 insertions(+) > > > create mode 100644 arch/riscv/include/asm/exec.h > > > > > > diff --git a/arch/riscv/include/asm/exec.h b/arch/riscv/include/asm/exec.h > > > new file mode 100644 > > > index 000000000000..07d9942682e0 > > > --- /dev/null > > > +++ b/arch/riscv/include/asm/exec.h > > > @@ -0,0 +1,8 @@ > > > +/* SPDX-License-Identifier: GPL-2.0-only */ > > > + > > > +#ifndef __ASM_EXEC_H > > > +#define __ASM_EXEC_H > > > + > > > +extern unsigned long arch_align_stack(unsigned long sp); > > > + > > > +#endif /* __ASM_EXEC_H */ > > > diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c > > > index e4bc61c4e58a..e3142d8a6e28 100644 > > > --- a/arch/riscv/kernel/process.c > > > +++ b/arch/riscv/kernel/process.c > > > @@ -15,6 +15,7 @@ > > > #include <linux/tick.h> > > > #include <linux/ptrace.h> > > > #include <linux/uaccess.h> > > > +#include <linux/personality.h> > > > > > > #include <asm/unistd.h> > > > #include <asm/processor.h> > > > @@ -26,6 +27,7 @@ > > > #include <asm/cpuidle.h> > > > #include <asm/vector.h> > > > #include <asm/cpufeature.h> > > > +#include <asm/exec.h> > > > > > > #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK) > > > #include <linux/stackprotector.h> > > > @@ -99,6 +101,13 @@ void show_regs(struct pt_regs *regs) > > > dump_backtrace(regs, NULL, KERN_DEFAULT); > > > } > > > > > > +unsigned long arch_align_stack(unsigned long sp) > > > +{ > > > + if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space) > > > + sp -= get_random_u32_below(PAGE_SIZE); > > > + return sp & ~0xf; > > > +} > > > + > > > #ifdef CONFIG_COMPAT > > > static bool compat_mode_supported __read_mostly; > > > > > > -- > > > 2.20.1 > > > > > > > Thanks, > > Yunhui > > Thanks, > Yunhui
Hello: This patch was applied to riscv/linux.git (for-next) by Palmer Dabbelt <palmer@rivosinc.com>: On Tue, 25 Jun 2024 11:05:02 +0800 you wrote: > Implement arch_align_stack() to randomize the lower bits > of the stack address. > > Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com> > --- > arch/riscv/include/asm/exec.h | 8 ++++++++ > arch/riscv/kernel/process.c | 9 +++++++++ > 2 files changed, 17 insertions(+) > create mode 100644 arch/riscv/include/asm/exec.h Here is the summary with links: - riscv: Randomize lower bits of stack address https://git.kernel.org/riscv/c/048e2906d4ca You are awesome, thank you!
diff --git a/arch/riscv/include/asm/exec.h b/arch/riscv/include/asm/exec.h new file mode 100644 index 000000000000..07d9942682e0 --- /dev/null +++ b/arch/riscv/include/asm/exec.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef __ASM_EXEC_H +#define __ASM_EXEC_H + +extern unsigned long arch_align_stack(unsigned long sp); + +#endif /* __ASM_EXEC_H */ diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c index e4bc61c4e58a..e3142d8a6e28 100644 --- a/arch/riscv/kernel/process.c +++ b/arch/riscv/kernel/process.c @@ -15,6 +15,7 @@ #include <linux/tick.h> #include <linux/ptrace.h> #include <linux/uaccess.h> +#include <linux/personality.h> #include <asm/unistd.h> #include <asm/processor.h> @@ -26,6 +27,7 @@ #include <asm/cpuidle.h> #include <asm/vector.h> #include <asm/cpufeature.h> +#include <asm/exec.h> #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK) #include <linux/stackprotector.h> @@ -99,6 +101,13 @@ void show_regs(struct pt_regs *regs) dump_backtrace(regs, NULL, KERN_DEFAULT); } +unsigned long arch_align_stack(unsigned long sp) +{ + if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space) + sp -= get_random_u32_below(PAGE_SIZE); + return sp & ~0xf; +} + #ifdef CONFIG_COMPAT static bool compat_mode_supported __read_mostly;
Implement arch_align_stack() to randomize the lower bits of the stack address. Signed-off-by: Yunhui Cui <cuiyunhui@bytedance.com> --- arch/riscv/include/asm/exec.h | 8 ++++++++ arch/riscv/kernel/process.c | 9 +++++++++ 2 files changed, 17 insertions(+) create mode 100644 arch/riscv/include/asm/exec.h