Loading arch/x86/kernel/signal_64.c +10 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,16 @@ static inline int restore_i387(struct _fpstate __user *buf) clts(); task_thread_info(current)->status |= TS_USEDFPU; } return restore_fpu_checking((__force struct i387_fxsave_struct *)buf); err = restore_fpu_checking((__force struct i387_fxsave_struct *)buf); if (unlikely(err)) { /* * Encountered an error while doing the restore from the * user buffer, clear the fpu state. */ clear_fpu(tsk); clear_used_math(); } return err; } /* Loading arch/x86/kernel/traps_64.c +8 −1 Original line number Diff line number Diff line Loading @@ -1131,7 +1131,14 @@ asmlinkage void math_state_restore(void) } clts(); /* Allow maths ops (or we recurse) */ restore_fpu_checking(&me->thread.xstate->fxsave); /* * Paranoid restore. send a SIGSEGV if we fail to restore the state. */ if (unlikely(restore_fpu_checking(&me->thread.xstate->fxsave))) { stts(); force_sig(SIGSEGV, me); return; } task_thread_info(me)->status |= TS_USEDFPU; me->fpu_counter++; } Loading include/asm-x86/i387.h +0 −2 Original line number Diff line number Diff line Loading @@ -62,8 +62,6 @@ static inline int restore_fpu_checking(struct i387_fxsave_struct *fx) #else : [fx] "cdaSDb" (fx), "m" (*fx), "0" (0)); #endif if (unlikely(err)) init_fpu(current); return err; } Loading Loading
arch/x86/kernel/signal_64.c +10 −1 Original line number Diff line number Diff line Loading @@ -104,7 +104,16 @@ static inline int restore_i387(struct _fpstate __user *buf) clts(); task_thread_info(current)->status |= TS_USEDFPU; } return restore_fpu_checking((__force struct i387_fxsave_struct *)buf); err = restore_fpu_checking((__force struct i387_fxsave_struct *)buf); if (unlikely(err)) { /* * Encountered an error while doing the restore from the * user buffer, clear the fpu state. */ clear_fpu(tsk); clear_used_math(); } return err; } /* Loading
arch/x86/kernel/traps_64.c +8 −1 Original line number Diff line number Diff line Loading @@ -1131,7 +1131,14 @@ asmlinkage void math_state_restore(void) } clts(); /* Allow maths ops (or we recurse) */ restore_fpu_checking(&me->thread.xstate->fxsave); /* * Paranoid restore. send a SIGSEGV if we fail to restore the state. */ if (unlikely(restore_fpu_checking(&me->thread.xstate->fxsave))) { stts(); force_sig(SIGSEGV, me); return; } task_thread_info(me)->status |= TS_USEDFPU; me->fpu_counter++; } Loading
include/asm-x86/i387.h +0 −2 Original line number Diff line number Diff line Loading @@ -62,8 +62,6 @@ static inline int restore_fpu_checking(struct i387_fxsave_struct *fx) #else : [fx] "cdaSDb" (fx), "m" (*fx), "0" (0)); #endif if (unlikely(err)) init_fpu(current); return err; } Loading