x86: unsafe_put-style macro for sigmask
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 16 Feb 2020 02:36:52 +0000 (21:36 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 26 Mar 2020 19:01:04 +0000 (15:01 -0400)
regularizes things a bit

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

index 38b359325291195175e4c79cbf408215aeec41a3..1215fc7da0ba8ca383e37c9f0b8f57866fd0f746 100644 (file)
@@ -203,6 +203,11 @@ do {                                                                       \
                goto label;                                             \
 } while(0);
 
+#define unsafe_put_sigmask(set, frame, label) \
+       unsafe_put_user(*(__u64 *)(set), \
+                       (__u64 __user *)&(frame)->uc.uc_sigmask, \
+                       label)
+
 /*
  * Set up a signal frame.
  */
@@ -392,8 +397,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
         */
        unsafe_put_user(*((u64 *)&rt_retcode), (u64 *)frame->retcode, Efault);
        unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
-       unsafe_put_user(*(__u64 *)set,
-                       (__u64 __user *)&frame->uc.uc_sigmask, Efault);
+       unsafe_put_sigmask(set, frame, Efault);
        user_access_end();
        
        if (copy_siginfo_to_user(&frame->info, &ksig->info))
@@ -458,7 +462,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
           already in userspace.  */
        unsafe_put_user(ksig->ka.sa.sa_restorer, &frame->pretcode, Efault);
        unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
-       unsafe_put_user(set->sig[0], &frame->uc.uc_sigmask.sig[0], Efault);
+       unsafe_put_sigmask(set, frame, Efault);
        user_access_end();
 
        if (ksig->ka.sa.sa_flags & SA_SIGINFO) {
@@ -537,7 +541,7 @@ static int x32_setup_rt_frame(struct ksignal *ksig,
        restorer = ksig->ka.sa.sa_restorer;
        unsafe_put_user(restorer, (unsigned long __user *)&frame->pretcode, Efault);
        unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
-       unsafe_put_user(*(__u64 *)set, (__u64 __user *)&frame->uc.uc_sigmask, Efault);
+       unsafe_put_sigmask(set, frame, Efault);
        user_access_end();
 
        if (ksig->ka.sa.sa_flags & SA_SIGINFO) {