]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
x86: ia32_setup_rt_frame(): consolidate uaccess areas
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 16 Feb 2020 00:42:40 +0000 (19:42 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 26 Mar 2020 18:41:10 +0000 (14:41 -0400)
__copy_siginfo_to_user32() call reordered a bit.  The rest folds
nicely.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/x86/ia32/ia32_signal.c

index 7018c2c325a185bfc21ce7fef4f1fcf83d23fabd..f9d8804144d0936f3593c2c09b404e9465cc3846 100644 (file)
@@ -302,10 +302,9 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig,
 {
        struct rt_sigframe_ia32 __user *frame;
        void __user *restorer;
-       int err = 0;
        void __user *fp = NULL;
 
-       /* __copy_to_user optimizes that into a single 8 byte store */
+       /* unsafe_put_user optimizes that into a single 8 byte store */
        static const struct {
                u8 movl;
                u32 val;
@@ -347,17 +346,11 @@ int ia32_setup_rt_frame(int sig, struct ksignal *ksig,
         * versions need it.
         */
        unsafe_put_user(*((u64 *)&code), (u64 __user *)frame->retcode, Efault);
-       user_access_end();
-
-       if (__copy_siginfo_to_user32(&frame->info, &ksig->info, false))
-               return -EFAULT;
-       if (!user_access_begin(&frame->uc.uc_mcontext, sizeof(struct sigcontext_32)))
-               return -EFAULT;
        unsafe_put_sigcontext32(&frame->uc.uc_mcontext, fp, regs, set, Efault);
+       unsafe_put_user(*(__u64 *)set, (__u64 *)&frame->uc.uc_sigmask, Efault);
        user_access_end();
-       err |= __put_user(*(__u64 *)set, (__u64 __user *)&frame->uc.uc_sigmask);
 
-       if (err)
+       if (__copy_siginfo_to_user32(&frame->info, &ksig->info, false))
                return -EFAULT;
 
        /* Set up registers for signal handler */