diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2021-09-08 15:29:29 +0200 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2021-09-14 21:10:03 +0200 |
commit | 4164a482a5d92c29eaf53d01755103f6bbce38f2 (patch) | |
tree | 997efc3799555dfc8d172afdc45b959c93f6a412 /arch/x86/kernel/fpu/signal.c | |
parent | x86/fpu/signal: Clarify exception handling in restore_fpregs_from_user() (diff) | |
download | linux-dev-4164a482a5d92c29eaf53d01755103f6bbce38f2.tar.xz linux-dev-4164a482a5d92c29eaf53d01755103f6bbce38f2.zip |
x86/fpu/signal: Move header zeroing out of xsave_to_user_sigframe()
There is no reason to have the header zeroing in the pagefault disabled
region. Do it upfront once.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lkml.kernel.org/r/20210908132525.621674721@linutronix.de
Diffstat (limited to 'arch/x86/kernel/fpu/signal.c')
-rw-r--r-- | arch/x86/kernel/fpu/signal.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c index 9bfffdb64c0d..5ca3ce94cf6b 100644 --- a/arch/x86/kernel/fpu/signal.c +++ b/arch/x86/kernel/fpu/signal.c @@ -189,6 +189,18 @@ int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size) if (!access_ok(buf, size)) return -EACCES; + + if (use_xsave()) { + struct xregs_state __user *xbuf = buf_fx; + + /* + * Clear the xsave header first, so that reserved fields are + * initialized to zero. + */ + ret = __clear_user(&xbuf->header, sizeof(xbuf->header)); + if (unlikely(ret)) + return ret; + } retry: /* * Load the FPU registers if they are not valid for the current task. |