[PATCH] uml: more __user annotations

From: Al Viro <viro@zeniv.linux.org.uk>

uml __user annotations

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Dike <jdike@addtoit.com>
Cc: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
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 b8719c31 ca34fb1a

+22 -17
+5 -4
arch/um/sys-i386/syscalls.c
··· 99 99 100 100 switch (call) { 101 101 case SEMOP: 102 - return sys_semtimedop(first, (struct sembuf *) ptr, second, 103 - NULL); 102 + return sys_semtimedop(first, (struct sembuf __user *) ptr, 103 + second, NULL); 104 104 case SEMTIMEDOP: 105 - return sys_semtimedop(first, (struct sembuf *) ptr, second, 106 - (const struct timespec *) fifth); 105 + return sys_semtimedop(first, (struct sembuf __user *) ptr, 106 + second, 107 + (const struct timespec __user *) fifth); 107 108 case SEMGET: 108 109 return sys_semget (first, second, third); 109 110 case SEMCTL: {
+14 -10
arch/um/sys-x86_64/signal.c
··· 21 21 #include "skas.h" 22 22 23 23 static int copy_sc_from_user_skas(struct pt_regs *regs, 24 - struct sigcontext *from) 24 + struct sigcontext __user *from) 25 25 { 26 26 int err = 0; 27 27 ··· 54 54 return(err); 55 55 } 56 56 57 - int copy_sc_to_user_skas(struct sigcontext *to, struct _fpstate *to_fp, 57 + int copy_sc_to_user_skas(struct sigcontext __user *to, 58 + struct _fpstate __user *to_fp, 58 59 struct pt_regs *regs, unsigned long mask, 59 60 unsigned long sp) 60 61 { ··· 107 106 #endif 108 107 109 108 #ifdef CONFIG_MODE_TT 110 - int copy_sc_from_user_tt(struct sigcontext *to, struct sigcontext *from, 109 + int copy_sc_from_user_tt(struct sigcontext *to, struct sigcontext __user *from, 111 110 int fpsize) 112 111 { 113 - struct _fpstate *to_fp, *from_fp; 112 + struct _fpstate *to_fp; 113 + struct _fpstate __user *from_fp; 114 114 unsigned long sigs; 115 115 int err; 116 116 ··· 126 124 return(err); 127 125 } 128 126 129 - int copy_sc_to_user_tt(struct sigcontext *to, struct _fpstate *fp, 127 + int copy_sc_to_user_tt(struct sigcontext __user *to, struct _fpstate __user *fp, 130 128 struct sigcontext *from, int fpsize, unsigned long sp) 131 129 { 132 - struct _fpstate *to_fp, *from_fp; 130 + struct _fpstate __user *to_fp; 131 + struct _fpstate *from_fp; 133 132 int err; 134 133 135 - to_fp = (fp ? fp : (struct _fpstate *) (to + 1)); 134 + to_fp = (fp ? fp : (struct _fpstate __user *) (to + 1)); 136 135 from_fp = from->fpstate; 137 136 err = copy_to_user(to, from, sizeof(*to)); 138 137 /* The SP in the sigcontext is the updated one for the signal ··· 161 158 return(ret); 162 159 } 163 160 164 - static int copy_sc_to_user(struct sigcontext *to, struct _fpstate *fp, 161 + static int copy_sc_to_user(struct sigcontext __user *to, 162 + struct _fpstate __user *fp, 165 163 struct pt_regs *from, unsigned long mask, 166 164 unsigned long sp) 167 165 { ··· 173 169 174 170 struct rt_sigframe 175 171 { 176 - char *pretcode; 172 + char __user *pretcode; 177 173 struct ucontext uc; 178 174 struct siginfo info; 179 175 }; ··· 192 188 193 189 frame = (struct rt_sigframe __user *) 194 190 round_down(stack_top - sizeof(struct rt_sigframe), 16) - 8; 195 - frame = (struct rt_sigframe *) ((unsigned long) frame - 128); 191 + frame = (struct rt_sigframe __user *) ((unsigned long) frame - 128); 196 192 197 193 if (!access_ok(VERIFY_WRITE, fp, sizeof(struct _fpstate))) 198 194 goto out;
+3 -3
include/asm-um/uaccess.h
··· 41 41 42 42 #define __get_user(x, ptr) \ 43 43 ({ \ 44 - const __typeof__(ptr) __private_ptr = ptr; \ 44 + const __typeof__(*(ptr)) __user *__private_ptr = (ptr); \ 45 45 __typeof__(x) __private_val; \ 46 46 int __private_ret = -EFAULT; \ 47 47 (x) = (__typeof__(*(__private_ptr)))0; \ 48 - if (__copy_from_user((void *) &__private_val, (__private_ptr), \ 48 + if (__copy_from_user((__force void *)&__private_val, (__private_ptr),\ 49 49 sizeof(*(__private_ptr))) == 0) { \ 50 50 (x) = (__typeof__(*(__private_ptr))) __private_val; \ 51 51 __private_ret = 0; \ ··· 62 62 63 63 #define __put_user(x, ptr) \ 64 64 ({ \ 65 - __typeof__(ptr) __private_ptr = ptr; \ 65 + __typeof__(*(ptr)) __user *__private_ptr = ptr; \ 66 66 __typeof__(*(__private_ptr)) __private_val; \ 67 67 int __private_ret = -EFAULT; \ 68 68 __private_val = (__typeof__(*(__private_ptr))) (x); \