@@ -326,11 +326,8 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
326
326
if (setup_sigcontext (& frame -> sc , fpstate , regs , set -> sig [0 ]))
327
327
return - EFAULT ;
328
328
329
- if (_NSIG_WORDS > 1 ) {
330
- if (__copy_to_user (& frame -> extramask , & set -> sig [1 ],
331
- sizeof (frame -> extramask )))
332
- return - EFAULT ;
333
- }
329
+ if (__put_user (set -> sig [1 ], & frame -> extramask [0 ]))
330
+ return - EFAULT ;
334
331
335
332
if (current -> mm -> context .vdso )
336
333
restorer = current -> mm -> context .vdso +
@@ -489,7 +486,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
489
486
} put_user_catch (err );
490
487
491
488
err |= setup_sigcontext (& frame -> uc .uc_mcontext , fp , regs , set -> sig [0 ]);
492
- err |= __copy_to_user ( & frame -> uc .uc_sigmask , set , sizeof ( * set ) );
489
+ err |= __put_user ( set -> sig [ 0 ], & frame -> uc .uc_sigmask . sig [ 0 ] );
493
490
494
491
if (err )
495
492
return - EFAULT ;
@@ -575,7 +572,7 @@ static int x32_setup_rt_frame(struct ksignal *ksig,
575
572
576
573
err |= setup_sigcontext (& frame -> uc .uc_mcontext , fpstate ,
577
574
regs , set -> sig [0 ]);
578
- err |= __copy_to_user ( & frame -> uc . uc_sigmask , set , sizeof ( * set ) );
575
+ err |= __put_user ( * ( __u64 * ) set , ( __u64 __user * ) & frame -> uc . uc_sigmask );
579
576
580
577
if (err )
581
578
return - EFAULT ;
@@ -613,9 +610,8 @@ SYSCALL_DEFINE0(sigreturn)
613
610
614
611
if (!access_ok (frame , sizeof (* frame )))
615
612
goto badframe ;
616
- if (__get_user (set .sig [0 ], & frame -> sc .oldmask ) || (_NSIG_WORDS > 1
617
- && __copy_from_user (& set .sig [1 ], & frame -> extramask ,
618
- sizeof (frame -> extramask ))))
613
+ if (__get_user (set .sig [0 ], & frame -> sc .oldmask ) ||
614
+ __get_user (set .sig [1 ], & frame -> extramask [0 ]))
619
615
goto badframe ;
620
616
621
617
set_current_blocked (& set );
@@ -645,7 +641,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
645
641
frame = (struct rt_sigframe __user * )(regs -> sp - sizeof (long ));
646
642
if (!access_ok (frame , sizeof (* frame )))
647
643
goto badframe ;
648
- if (__copy_from_user ( & set , & frame -> uc .uc_sigmask , sizeof ( set ) ))
644
+ if (__get_user ( * ( __u64 * ) & set , ( __u64 __user * ) & frame -> uc .uc_sigmask ))
649
645
goto badframe ;
650
646
if (__get_user (uc_flags , & frame -> uc .uc_flags ))
651
647
goto badframe ;
@@ -870,7 +866,7 @@ asmlinkage long sys32_x32_rt_sigreturn(void)
870
866
871
867
if (!access_ok (frame , sizeof (* frame )))
872
868
goto badframe ;
873
- if (__copy_from_user ( & set , & frame -> uc .uc_sigmask , sizeof ( set ) ))
869
+ if (__get_user ( set . sig [ 0 ], ( __u64 __user * ) & frame -> uc .uc_sigmask ))
874
870
goto badframe ;
875
871
if (__get_user (uc_flags , & frame -> uc .uc_flags ))
876
872
goto badframe ;
0 commit comments