# 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 
- List: linux-arch
- Page: https://ratatoskr.run/linux-arch/2021/05/1388531
- Thread: https://ratatoskr.run/linux-doc/2021/05/1388103/t.md

```text
On Fri, May 21, 2021 at 3:14 PM Yu-cheng Yu [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
```
