Re: [PATCH v27 24/31] x86/cet/shstk: Handle thread shadow stack
From: Andy Lutomirski <luto@kernel.org>
Date: 2021-05-22 23:39:37
Also in:
linux-arch, linux-doc, linux-mm, lkml
From: Andy Lutomirski <luto@kernel.org>
Date: 2021-05-22 23:39:37
Also in:
linux-arch, linux-doc, linux-mm, lkml
On Fri, May 21, 2021 at 3:14 PM Yu-cheng Yu [off-list ref] wrote:
diff --git a/arch/x86/kernel/shstk.c b/arch/x86/kernel/shstk.c index 5ea2b494e9f9..8e5f772181b9 100644 --- a/arch/x86/kernel/shstk.c +++ b/arch/x86/kernel/shstk.c@@ -71,6 +71,53 @@ int shstk_setup(void) return 0; } +int shstk_alloc_thread_stack(struct task_struct *tsk, unsigned long clone_flags, + unsigned long stack_size) +{
...
+ state = get_xsave_addr(&tsk->thread.fpu.state.xsave, XFEATURE_CET_USER); + if (!state) + return -EINVAL; +
The get_xsave_addr() API is horrible, and we already have one egregiously buggy instance in the kernel. Let's not add another dubious use case. If state == NULL, this means that CET_USER is in its init state. CET_USER in the init state should behave identically regardless of whether XINUSE[CET_USER] is set. Can you please adjust this code accordingly? Thanks, Andy