On Fri, Nov 04, 2022 at 03:35:54PM -0700, Rick Edgecombe wrote: > +#ifdef CONFIG_X86_USER_SHADOW_STACK > +static inline int write_user_shstk_64(u64 __user *addr, u64 val) > +{ > + asm_volatile_goto("1: wrussq %[val], (%[addr])\n" > + _ASM_EXTABLE(1b, %l[fail]) > + :: [addr] "r" (addr), [val] "r" (val) > + :: fail); > + return 0; > +fail: > + return -EFAULT; > +} > +#endif /* CONFIG_X86_USER_SHADOW_STACK */ Why isn't this modelled after put_user() ? Should you write a 64bit value even if the task receiving a signal is 32bit ?