Re: [RFC PATCH v2 18/27] x86/cet/shstk: Introduce WRUSS instruction
From: Yu-cheng Yu <hidden>
Date: 2018-07-11 15:10:37
Also in:
linux-api, linux-doc, linux-mm, lkml
From: Yu-cheng Yu <hidden>
Date: 2018-07-11 15:10:37
Also in:
linux-api, linux-doc, linux-mm, lkml
On Wed, 2018-07-11 at 11:44 +0200, Peter Zijlstra wrote:
On Tue, Jul 10, 2018 at 03:26:30PM -0700, Yu-cheng Yu wrote:quoted
WRUSS is a new kernel-mode instruction but writes directly to user shadow stack memory. This is used to construct a return address on the shadow stack for the signal handler. This instruction can fault if the user shadow stack is invalid shadow stack memory. In that case, the kernel does fixup. +static inline int write_user_shstk_64(unsigned long addr, unsigned long val) +{ + int err = 0; + + asm volatile("1: wrussq %[val], (%[addr])\n" + "xor %[err], %[err]\n"this XOR is superfluous, you already cleared @err above.
I will fix it.
quoted
+ "2:\n" + ".section .fixup,\"ax\"\n" + "3: mov $-1, %[err]; jmp 2b\n" + ".previous\n" + _ASM_EXTABLE(1b, 3b) + : [err] "=a" (err) + : [val] "S" (val), [addr] "D" (addr)); + + return err; +} +#endif /* CONFIG_X86_INTEL_CET */ + #define nop() asm volatile ("nop")What happened to: https://lkml.kernel.org/r/1528729376.4526.0.camel@2b52.sc.intel.com
Yes, I put that in once and realized we only need to skip the instruction and return err. Do you think we still need a handler for that? Yu-cheng