Thread (123 messages) 123 messages, 12 authors, 2018-08-14

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

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help