]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - arch/x86/kernel/fpu/signal.c
x86/fpu: Change fpu->fpregs_active users to fpu->fpstate_active
[mirror_ubuntu-bionic-kernel.git] / arch / x86 / kernel / fpu / signal.c
index 83c23c230b4c4fc78664ba08663a04c684c2105b..a88083ba7f8bd62106825ddf482b777998a1d6ba 100644 (file)
@@ -155,7 +155,8 @@ static inline int copy_fpregs_to_sigframe(struct xregs_state __user *buf)
  */
 int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
 {
-       struct xregs_state *xsave = &current->thread.fpu.state.xsave;
+       struct fpu *fpu = &current->thread.fpu;
+       struct xregs_state *xsave = &fpu->state.xsave;
        struct task_struct *tsk = current;
        int ia32_fxstate = (buf != buf_fx);
 
@@ -170,13 +171,15 @@ int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
                        sizeof(struct user_i387_ia32_struct), NULL,
                        (struct _fpstate_32 __user *) buf) ? -1 : 1;
 
-       if (fpregs_active() || using_compacted_format()) {
+       WARN_ON_FPU(fpu->fpstate_active != fpu->fpregs_active);
+
+       if (fpu->fpstate_active || using_compacted_format()) {
                /* Save the live register state to the user directly. */
                if (copy_fpregs_to_sigframe(buf_fx))
                        return -1;
                /* Update the thread's fxstate to save the fsave header. */
                if (ia32_fxstate)
-                       copy_fxregs_to_kernel(&tsk->thread.fpu);
+                       copy_fxregs_to_kernel(fpu);
        } else {
                /*
                 * It is a *bug* if kernel uses compacted-format for xsave
@@ -189,7 +192,7 @@ int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
                        return -1;
                }
 
-               fpstate_sanitize_xstate(&tsk->thread.fpu);
+               fpstate_sanitize_xstate(fpu);
                if (__copy_to_user(buf_fx, xsave, fpu_user_xstate_size))
                        return -1;
        }
@@ -323,13 +326,10 @@ static int __fpu__restore_sig(void __user *buf, void __user *buf_fx, int size)
                 */
                fpu__drop(fpu);
 
-               if (using_compacted_format()) {
-                       err = copyin_to_xsaves(NULL, buf_fx,
-                                              &fpu->state.xsave);
-               } else {
-                       err = __copy_from_user(&fpu->state.xsave,
-                                              buf_fx, state_size);
-               }
+               if (using_compacted_format())
+                       err = copy_user_to_xstate(&fpu->state.xsave, buf_fx);
+               else
+                       err = __copy_from_user(&fpu->state.xsave, buf_fx, state_size);
 
                if (err || __copy_from_user(&env, buf, sizeof(env))) {
                        fpstate_init(&fpu->state);