@@ -203,6 +203,11 @@ do { \
203
203
goto label; \
204
204
} while(0);
205
205
206
+ #define unsafe_put_sigmask (set , frame , label ) \
207
+ unsafe_put_user(*(__u64 *)(set), \
208
+ (__u64 __user *)&(frame)->uc.uc_sigmask, \
209
+ label)
210
+
206
211
/*
207
212
* Set up a signal frame.
208
213
*/
@@ -392,8 +397,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
392
397
*/
393
398
unsafe_put_user (* ((u64 * )& rt_retcode ), (u64 * )frame -> retcode , Efault );
394
399
unsafe_put_sigcontext (& frame -> uc .uc_mcontext , fp , regs , set , Efault );
395
- unsafe_put_user (* (__u64 * )set ,
396
- (__u64 __user * )& frame -> uc .uc_sigmask , Efault );
400
+ unsafe_put_sigmask (set , frame , Efault );
397
401
user_access_end ();
398
402
399
403
if (copy_siginfo_to_user (& frame -> info , & ksig -> info ))
@@ -458,7 +462,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
458
462
already in userspace. */
459
463
unsafe_put_user (ksig -> ka .sa .sa_restorer , & frame -> pretcode , Efault );
460
464
unsafe_put_sigcontext (& frame -> uc .uc_mcontext , fp , regs , set , Efault );
461
- unsafe_put_user (set -> sig [ 0 ], & frame -> uc . uc_sigmask . sig [ 0 ] , Efault );
465
+ unsafe_put_sigmask (set , frame , Efault );
462
466
user_access_end ();
463
467
464
468
if (ksig -> ka .sa .sa_flags & SA_SIGINFO ) {
@@ -537,7 +541,7 @@ static int x32_setup_rt_frame(struct ksignal *ksig,
537
541
restorer = ksig -> ka .sa .sa_restorer ;
538
542
unsafe_put_user (restorer , (unsigned long __user * )& frame -> pretcode , Efault );
539
543
unsafe_put_sigcontext (& frame -> uc .uc_mcontext , fp , regs , set , Efault );
540
- unsafe_put_user ( * ( __u64 * ) set , ( __u64 __user * ) & frame -> uc . uc_sigmask , Efault );
544
+ unsafe_put_sigmask ( set , frame , Efault );
541
545
user_access_end ();
542
546
543
547
if (ksig -> ka .sa .sa_flags & SA_SIGINFO ) {
0 commit comments