Re: [patch 02/18] randomize_kstack: Provide add_random_kstack_offset_irqsoff()
Mukesh Kumar Chaurasiya <[email protected]> Fri, 10 Jul 2026 00:04:21 +0530
| Newsgroups | gmane.linux.documentation,gmane.linux.kernel,gmane.linux.ports.ppc64.devel,gmane.linux.ports.riscv,gmane.linux.ports.arm.kernel,gmane.linux.ports.alpha,gmane.linux.ports.mips,gmane.linux.ports.parisc,gmane.linux.ports.sh.devel,gmane.linux.uml.devel,gmane.linux.kernel.arc,gmane.linux.ports.hexagon,gmane.linux.ports.sparc,gmane.linux.kernel.cross-arch |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Jul 07, 2026 at 09:06:02PM +0200, Thomas Gleixner wrote: > add_random_kstack_offset() uses get/put_cpu_var() which is pointless > overhead when it is invoked from low level entry code with interrupts > disabled. > > Provide a irqsoff() variant, which avoids that. > > Signed-off-by: Thomas Gleixner <[email protected]> > Cc: Kees Cook <[email protected]> > --- > include/linux/randomize_kstack.h | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > --- a/include/linux/randomize_kstack.h > +++ b/include/linux/randomize_kstack.h > @@ -77,8 +77,27 @@ static __always_inline u32 get_kstack_of > } \ > } while (0) > > +/** > + * add_random_kstack_offset_irqsoff - Increase stack utilization by a random offset. > + * > + * This should be used in the syscall entry path after user registers have been > + * stored to the stack. Interrupts must be still disabled. > + */ > +#define add_random_kstack_offset_irqsoff() \ > +do { \ > + lockdep_assert_irqs_disabled(); \ > + if (static_branch_maybe(CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT, \ > + &randomize_kstack_offset)) { \ > + u32 offset = prandom_u32_state(raw_cpu_ptr(&kstack_rnd_state)); \ > + u8 *ptr = __kstack_alloca(KSTACK_OFFSET_MAX(offset)); \ > + /* Keep allocation even after "ptr" loses scope. */ \ > + asm volatile("" :: "r"(ptr) : "memory"); \ > + } \ > +} while (0) > + > #else /* CONFIG_RANDOMIZE_KSTACK_OFFSET */ > #define add_random_kstack_offset() do { } while (0) > +#define add_random_kstack_offset_irqsoff() do { } while (0) > #endif /* CONFIG_RANDOMIZE_KSTACK_OFFSET */ > > #endif > LGTM. Reviewed-by: Mukesh Kumar Chaurasiya (IBM) <[email protected]> > > _______________________________________________ > linux-snps-arc mailing list > [email protected] > http://lists.infradead.org/mailman/listinfo/linux-snps-arc