{
        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;
         * 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 */