[PATCH] m68k: signal __user annotations

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Al Viro and committed by Linus Torvalds 2382f77f 11c40f8a

+32 -32
+31 -31
arch/m68k/kernel/signal.c
··· 96 asmlinkage int 97 do_rt_sigsuspend(struct pt_regs *regs) 98 { 99 - sigset_t *unewset = (sigset_t *)regs->d1; 100 size_t sigsetsize = (size_t)regs->d2; 101 sigset_t saveset, newset; 102 ··· 122 } 123 124 asmlinkage int 125 - sys_sigaction(int sig, const struct old_sigaction *act, 126 - struct old_sigaction *oact) 127 { 128 struct k_sigaction new_ka, old_ka; 129 int ret; ··· 154 } 155 156 asmlinkage int 157 - sys_sigaltstack(const stack_t *uss, stack_t *uoss) 158 { 159 return do_sigaltstack(uss, uoss, rdusp()); 160 } ··· 169 170 struct sigframe 171 { 172 - char *pretcode; 173 int sig; 174 int code; 175 - struct sigcontext *psc; 176 char retcode[8]; 177 unsigned long extramask[_NSIG_WORDS-1]; 178 struct sigcontext sc; ··· 180 181 struct rt_sigframe 182 { 183 - char *pretcode; 184 int sig; 185 - struct siginfo *pinfo; 186 - void *puc; 187 char retcode[8]; 188 struct siginfo info; 189 struct ucontext uc; ··· 248 #define uc_formatvec uc_filler[FPCONTEXT_SIZE/4] 249 #define uc_extra uc_filler[FPCONTEXT_SIZE/4+1] 250 251 - static inline int rt_restore_fpu_state(struct ucontext *uc) 252 { 253 unsigned char fpstate[FPCONTEXT_SIZE]; 254 int context_size = CPU_IS_060 ? 8 : 0; ··· 267 return 0; 268 } 269 270 - if (__get_user(*(long *)fpstate, (long *)&uc->uc_fpstate)) 271 goto out; 272 if (CPU_IS_060 ? fpstate[2] : fpstate[0]) { 273 if (!CPU_IS_060) ··· 306 "m" (*fpregs.f_fpcntl)); 307 } 308 if (context_size && 309 - __copy_from_user(fpstate + 4, (long *)&uc->uc_fpstate + 1, 310 context_size)) 311 goto out; 312 __asm__ volatile (".chip 68k/68881\n\t" ··· 319 } 320 321 static inline int 322 - restore_sigcontext(struct pt_regs *regs, struct sigcontext *usc, void *fp, 323 int *pd0) 324 { 325 int fsize, formatvec; ··· 404 405 static inline int 406 rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw, 407 - struct ucontext *uc, int *pd0) 408 { 409 int fsize, temp; 410 - greg_t *gregs = uc->uc_mcontext.gregs; 411 unsigned long usp; 412 int err; 413 ··· 506 struct switch_stack *sw = (struct switch_stack *) &__unused; 507 struct pt_regs *regs = (struct pt_regs *) (sw + 1); 508 unsigned long usp = rdusp(); 509 - struct sigframe *frame = (struct sigframe *)(usp - 4); 510 sigset_t set; 511 int d0; 512 ··· 536 struct switch_stack *sw = (struct switch_stack *) &__unused; 537 struct pt_regs *regs = (struct pt_regs *) (sw + 1); 538 unsigned long usp = rdusp(); 539 - struct rt_sigframe *frame = (struct rt_sigframe *)(usp - 4); 540 sigset_t set; 541 int d0; 542 ··· 596 } 597 } 598 599 - static inline int rt_save_fpu_state(struct ucontext *uc, struct pt_regs *regs) 600 { 601 unsigned char fpstate[FPCONTEXT_SIZE]; 602 int context_size = CPU_IS_060 ? 8 : 0; ··· 617 ".chip 68k" 618 : : "m" (*fpstate) : "memory"); 619 620 - err |= __put_user(*(long *)fpstate, (long *)&uc->uc_fpstate); 621 if (CPU_IS_060 ? fpstate[2] : fpstate[0]) { 622 fpregset_t fpregs; 623 if (!CPU_IS_060) ··· 642 sizeof(fpregs)); 643 } 644 if (context_size) 645 - err |= copy_to_user((long *)&uc->uc_fpstate + 1, fpstate + 4, 646 context_size); 647 return err; 648 } ··· 662 save_fpu_state(sc, regs); 663 } 664 665 - static inline int rt_setup_ucontext(struct ucontext *uc, struct pt_regs *regs) 666 { 667 struct switch_stack *sw = (struct switch_stack *)regs - 1; 668 - greg_t *gregs = uc->uc_mcontext.gregs; 669 int err = 0; 670 671 err |= __put_user(MCONTEXT_VERSION, &uc->uc_mcontext.version); ··· 753 } 754 } 755 756 - static inline void * 757 get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) 758 { 759 unsigned long usp; ··· 766 if (!on_sig_stack(usp)) 767 usp = current->sas_ss_sp + current->sas_ss_size; 768 } 769 - return (void *)((usp - frame_size) & -8UL); 770 } 771 772 static void setup_frame (int sig, struct k_sigaction *ka, 773 sigset_t *set, struct pt_regs *regs) 774 { 775 - struct sigframe *frame; 776 int fsize = frame_extra_sizes[regs->format]; 777 struct sigcontext context; 778 int err = 0; ··· 813 err |= __put_user(frame->retcode, &frame->pretcode); 814 /* moveq #,d0; trap #0 */ 815 err |= __put_user(0x70004e40 + (__NR_sigreturn << 16), 816 - (long *)(frame->retcode)); 817 818 if (err) 819 goto give_sigsegv; ··· 849 static void setup_rt_frame (int sig, struct k_sigaction *ka, siginfo_t *info, 850 sigset_t *set, struct pt_regs *regs) 851 { 852 - struct rt_sigframe *frame; 853 int fsize = frame_extra_sizes[regs->format]; 854 int err = 0; 855 ··· 880 881 /* Create the ucontext. */ 882 err |= __put_user(0, &frame->uc.uc_flags); 883 - err |= __put_user(0, &frame->uc.uc_link); 884 - err |= __put_user((void *)current->sas_ss_sp, 885 &frame->uc.uc_stack.ss_sp); 886 err |= __put_user(sas_ss_flags(rdusp()), 887 &frame->uc.uc_stack.ss_flags); ··· 893 err |= __put_user(frame->retcode, &frame->pretcode); 894 /* moveq #,d0; notb d0; trap #0 */ 895 err |= __put_user(0x70004600 + ((__NR_rt_sigreturn ^ 0xff) << 16), 896 - (long *)(frame->retcode + 0)); 897 - err |= __put_user(0x4e40, (short *)(frame->retcode + 4)); 898 899 if (err) 900 goto give_sigsegv;
··· 96 asmlinkage int 97 do_rt_sigsuspend(struct pt_regs *regs) 98 { 99 + sigset_t __user *unewset = (sigset_t __user *)regs->d1; 100 size_t sigsetsize = (size_t)regs->d2; 101 sigset_t saveset, newset; 102 ··· 122 } 123 124 asmlinkage int 125 + sys_sigaction(int sig, const struct old_sigaction __user *act, 126 + struct old_sigaction __user *oact) 127 { 128 struct k_sigaction new_ka, old_ka; 129 int ret; ··· 154 } 155 156 asmlinkage int 157 + sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) 158 { 159 return do_sigaltstack(uss, uoss, rdusp()); 160 } ··· 169 170 struct sigframe 171 { 172 + char __user *pretcode; 173 int sig; 174 int code; 175 + struct sigcontext __user *psc; 176 char retcode[8]; 177 unsigned long extramask[_NSIG_WORDS-1]; 178 struct sigcontext sc; ··· 180 181 struct rt_sigframe 182 { 183 + char __user *pretcode; 184 int sig; 185 + struct siginfo __user *pinfo; 186 + void __user *puc; 187 char retcode[8]; 188 struct siginfo info; 189 struct ucontext uc; ··· 248 #define uc_formatvec uc_filler[FPCONTEXT_SIZE/4] 249 #define uc_extra uc_filler[FPCONTEXT_SIZE/4+1] 250 251 + static inline int rt_restore_fpu_state(struct ucontext __user *uc) 252 { 253 unsigned char fpstate[FPCONTEXT_SIZE]; 254 int context_size = CPU_IS_060 ? 8 : 0; ··· 267 return 0; 268 } 269 270 + if (__get_user(*(long *)fpstate, (long __user *)&uc->uc_fpstate)) 271 goto out; 272 if (CPU_IS_060 ? fpstate[2] : fpstate[0]) { 273 if (!CPU_IS_060) ··· 306 "m" (*fpregs.f_fpcntl)); 307 } 308 if (context_size && 309 + __copy_from_user(fpstate + 4, (long __user *)&uc->uc_fpstate + 1, 310 context_size)) 311 goto out; 312 __asm__ volatile (".chip 68k/68881\n\t" ··· 319 } 320 321 static inline int 322 + restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *usc, void __user *fp, 323 int *pd0) 324 { 325 int fsize, formatvec; ··· 404 405 static inline int 406 rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw, 407 + struct ucontext __user *uc, int *pd0) 408 { 409 int fsize, temp; 410 + greg_t __user *gregs = uc->uc_mcontext.gregs; 411 unsigned long usp; 412 int err; 413 ··· 506 struct switch_stack *sw = (struct switch_stack *) &__unused; 507 struct pt_regs *regs = (struct pt_regs *) (sw + 1); 508 unsigned long usp = rdusp(); 509 + struct sigframe __user *frame = (struct sigframe __user *)(usp - 4); 510 sigset_t set; 511 int d0; 512 ··· 536 struct switch_stack *sw = (struct switch_stack *) &__unused; 537 struct pt_regs *regs = (struct pt_regs *) (sw + 1); 538 unsigned long usp = rdusp(); 539 + struct rt_sigframe __user *frame = (struct rt_sigframe __user *)(usp - 4); 540 sigset_t set; 541 int d0; 542 ··· 596 } 597 } 598 599 + static inline int rt_save_fpu_state(struct ucontext __user *uc, struct pt_regs *regs) 600 { 601 unsigned char fpstate[FPCONTEXT_SIZE]; 602 int context_size = CPU_IS_060 ? 8 : 0; ··· 617 ".chip 68k" 618 : : "m" (*fpstate) : "memory"); 619 620 + err |= __put_user(*(long *)fpstate, (long __user *)&uc->uc_fpstate); 621 if (CPU_IS_060 ? fpstate[2] : fpstate[0]) { 622 fpregset_t fpregs; 623 if (!CPU_IS_060) ··· 642 sizeof(fpregs)); 643 } 644 if (context_size) 645 + err |= copy_to_user((long __user *)&uc->uc_fpstate + 1, fpstate + 4, 646 context_size); 647 return err; 648 } ··· 662 save_fpu_state(sc, regs); 663 } 664 665 + static inline int rt_setup_ucontext(struct ucontext __user *uc, struct pt_regs *regs) 666 { 667 struct switch_stack *sw = (struct switch_stack *)regs - 1; 668 + greg_t __user *gregs = uc->uc_mcontext.gregs; 669 int err = 0; 670 671 err |= __put_user(MCONTEXT_VERSION, &uc->uc_mcontext.version); ··· 753 } 754 } 755 756 + static inline void __user * 757 get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) 758 { 759 unsigned long usp; ··· 766 if (!on_sig_stack(usp)) 767 usp = current->sas_ss_sp + current->sas_ss_size; 768 } 769 + return (void __user *)((usp - frame_size) & -8UL); 770 } 771 772 static void setup_frame (int sig, struct k_sigaction *ka, 773 sigset_t *set, struct pt_regs *regs) 774 { 775 + struct sigframe __user *frame; 776 int fsize = frame_extra_sizes[regs->format]; 777 struct sigcontext context; 778 int err = 0; ··· 813 err |= __put_user(frame->retcode, &frame->pretcode); 814 /* moveq #,d0; trap #0 */ 815 err |= __put_user(0x70004e40 + (__NR_sigreturn << 16), 816 + (long __user *)(frame->retcode)); 817 818 if (err) 819 goto give_sigsegv; ··· 849 static void setup_rt_frame (int sig, struct k_sigaction *ka, siginfo_t *info, 850 sigset_t *set, struct pt_regs *regs) 851 { 852 + struct rt_sigframe __user *frame; 853 int fsize = frame_extra_sizes[regs->format]; 854 int err = 0; 855 ··· 880 881 /* Create the ucontext. */ 882 err |= __put_user(0, &frame->uc.uc_flags); 883 + err |= __put_user(NULL, &frame->uc.uc_link); 884 + err |= __put_user((void __user *)current->sas_ss_sp, 885 &frame->uc.uc_stack.ss_sp); 886 err |= __put_user(sas_ss_flags(rdusp()), 887 &frame->uc.uc_stack.ss_flags); ··· 893 err |= __put_user(frame->retcode, &frame->pretcode); 894 /* moveq #,d0; notb d0; trap #0 */ 895 err |= __put_user(0x70004600 + ((__NR_rt_sigreturn ^ 0xff) << 16), 896 + (long __user *)(frame->retcode + 0)); 897 + err |= __put_user(0x4e40, (short __user *)(frame->retcode + 4)); 898 899 if (err) 900 goto give_sigsegv;
+1 -1
include/asm-m68k/signal.h
··· 144 #endif /* __KERNEL__ */ 145 146 typedef struct sigaltstack { 147 - void *ss_sp; 148 int ss_flags; 149 size_t ss_size; 150 } stack_t;
··· 144 #endif /* __KERNEL__ */ 145 146 typedef struct sigaltstack { 147 + void __user *ss_sp; 148 int ss_flags; 149 size_t ss_size; 150 } stack_t;