]> Pileus Git - ~andy/linux/blobdiff - arch/x86/kernel/xsave.c
Merge branch 'x86-xsave-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[~andy/linux] / arch / x86 / kernel / xsave.c
index b2549c3eb2c3fd727a664c6e8ec36379e7041c5e..9c253bd65e24ba3e803b044fca3ad57224a41c52 100644 (file)
@@ -169,14 +169,6 @@ int save_i387_xstate(void __user *buf)
                return 0;
 
        if (task_thread_info(tsk)->status & TS_USEDFPU) {
-               /*
-                * Start with clearing the user buffer. This will present a
-                * clean context for the bytes not touched by the fxsave/xsave.
-                */
-               err = __clear_user(buf, sig_xstate_size);
-               if (err)
-                       return err;
-
                if (use_xsave())
                        err = xsave_user(buf);
                else
@@ -263,8 +255,8 @@ static int restore_user_xstate(void __user *buf)
         * init the state skipped by the user.
         */
        mask = pcntxt_mask & ~mask;
-
-       xrstor_state(init_xstate_buf, mask);
+       if (unlikely(mask))
+               xrstor_state(init_xstate_buf, mask);
 
        return 0;