diff options
author | Mike Frysinger <vapier.adi@gmail.com> | 2008-03-06 13:37:41 -0500 |
---|---|---|
committer | Bryan Wu <cooloney@kernel.org> | 2008-03-06 13:37:41 -0500 |
commit | 0ddeeca25ce33686262459e2387f57bd09574e47 (patch) | |
tree | cd33798b51e358260e2089a97e9e3e3de6d8e02b | |
parent | 1307a65130963b061fbaca308b228a0f693a4495 (diff) |
[Blackfin] arch: add missing __user marking to ss_sp member of signalstack and a few userspace system functions
Signed-off-by: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
-rw-r--r-- | arch/blackfin/kernel/process.c | 20 | ||||
-rw-r--r-- | arch/blackfin/kernel/ptrace.c | 7 | ||||
-rw-r--r-- | arch/blackfin/kernel/signal.c | 4 | ||||
-rw-r--r-- | arch/blackfin/kernel/sys_bfin.c | 2 | ||||
-rw-r--r-- | arch/blackfin/kernel/traps.c | 2 | ||||
-rw-r--r-- | include/asm-blackfin/signal.h | 2 |
6 files changed, 20 insertions, 17 deletions
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c index 6dedb2da8b67..fb94cbeafad6 100644 --- a/arch/blackfin/kernel/process.c +++ b/arch/blackfin/kernel/process.c | |||
@@ -202,7 +202,7 @@ copy_thread(int nr, unsigned long clone_flags, | |||
202 | * sys_execve() executes a new program. | 202 | * sys_execve() executes a new program. |
203 | */ | 203 | */ |
204 | 204 | ||
205 | asmlinkage int sys_execve(char *name, char **argv, char **envp) | 205 | asmlinkage int sys_execve(char __user *name, char __user * __user *argv, char __user * __user *envp) |
206 | { | 206 | { |
207 | int error; | 207 | int error; |
208 | char *filename; | 208 | char *filename; |
@@ -245,23 +245,25 @@ unsigned long get_wchan(struct task_struct *p) | |||
245 | 245 | ||
246 | void finish_atomic_sections (struct pt_regs *regs) | 246 | void finish_atomic_sections (struct pt_regs *regs) |
247 | { | 247 | { |
248 | int __user *up0 = (int __user *)®s->p0; | ||
249 | |||
248 | if (regs->pc < ATOMIC_SEQS_START || regs->pc >= ATOMIC_SEQS_END) | 250 | if (regs->pc < ATOMIC_SEQS_START || regs->pc >= ATOMIC_SEQS_END) |
249 | return; | 251 | return; |
250 | 252 | ||
251 | switch (regs->pc) { | 253 | switch (regs->pc) { |
252 | case ATOMIC_XCHG32 + 2: | 254 | case ATOMIC_XCHG32 + 2: |
253 | put_user(regs->r1, (int *)regs->p0); | 255 | put_user(regs->r1, up0); |
254 | regs->pc += 2; | 256 | regs->pc += 2; |
255 | break; | 257 | break; |
256 | 258 | ||
257 | case ATOMIC_CAS32 + 2: | 259 | case ATOMIC_CAS32 + 2: |
258 | case ATOMIC_CAS32 + 4: | 260 | case ATOMIC_CAS32 + 4: |
259 | if (regs->r0 == regs->r1) | 261 | if (regs->r0 == regs->r1) |
260 | put_user(regs->r2, (int *)regs->p0); | 262 | put_user(regs->r2, up0); |
261 | regs->pc = ATOMIC_CAS32 + 8; | 263 | regs->pc = ATOMIC_CAS32 + 8; |
262 | break; | 264 | break; |
263 | case ATOMIC_CAS32 + 6: | 265 | case ATOMIC_CAS32 + 6: |
264 | put_user(regs->r2, (int *)regs->p0); | 266 | put_user(regs->r2, up0); |
265 | regs->pc += 2; | 267 | regs->pc += 2; |
266 | break; | 268 | break; |
267 | 269 | ||
@@ -269,7 +271,7 @@ void finish_atomic_sections (struct pt_regs *regs) | |||
269 | regs->r0 = regs->r1 + regs->r0; | 271 | regs->r0 = regs->r1 + regs->r0; |
270 | /* fall through */ | 272 | /* fall through */ |
271 | case ATOMIC_ADD32 + 4: | 273 | case ATOMIC_ADD32 + 4: |
272 | put_user(regs->r0, (int *)regs->p0); | 274 | put_user(regs->r0, up0); |
273 | regs->pc = ATOMIC_ADD32 + 6; | 275 | regs->pc = ATOMIC_ADD32 + 6; |
274 | break; | 276 | break; |
275 | 277 | ||
@@ -277,7 +279,7 @@ void finish_atomic_sections (struct pt_regs *regs) | |||
277 | regs->r0 = regs->r1 - regs->r0; | 279 | regs->r0 = regs->r1 - regs->r0; |
278 | /* fall through */ | 280 | /* fall through */ |
279 | case ATOMIC_SUB32 + 4: | 281 | case ATOMIC_SUB32 + 4: |
280 | put_user(regs->r0, (int *)regs->p0); | 282 | put_user(regs->r0, up0); |
281 | regs->pc = ATOMIC_SUB32 + 6; | 283 | regs->pc = ATOMIC_SUB32 + 6; |
282 | break; | 284 | break; |
283 | 285 | ||
@@ -285,7 +287,7 @@ void finish_atomic_sections (struct pt_regs *regs) | |||
285 | regs->r0 = regs->r1 | regs->r0; | 287 | regs->r0 = regs->r1 | regs->r0; |
286 | /* fall through */ | 288 | /* fall through */ |
287 | case ATOMIC_IOR32 + 4: | 289 | case ATOMIC_IOR32 + 4: |
288 | put_user(regs->r0, (int *)regs->p0); | 290 | put_user(regs->r0, up0); |
289 | regs->pc = ATOMIC_IOR32 + 6; | 291 | regs->pc = ATOMIC_IOR32 + 6; |
290 | break; | 292 | break; |
291 | 293 | ||
@@ -293,7 +295,7 @@ void finish_atomic_sections (struct pt_regs *regs) | |||
293 | regs->r0 = regs->r1 & regs->r0; | 295 | regs->r0 = regs->r1 & regs->r0; |
294 | /* fall through */ | 296 | /* fall through */ |
295 | case ATOMIC_AND32 + 4: | 297 | case ATOMIC_AND32 + 4: |
296 | put_user(regs->r0, (int *)regs->p0); | 298 | put_user(regs->r0, up0); |
297 | regs->pc = ATOMIC_AND32 + 6; | 299 | regs->pc = ATOMIC_AND32 + 6; |
298 | break; | 300 | break; |
299 | 301 | ||
@@ -301,7 +303,7 @@ void finish_atomic_sections (struct pt_regs *regs) | |||
301 | regs->r0 = regs->r1 ^ regs->r0; | 303 | regs->r0 = regs->r1 ^ regs->r0; |
302 | /* fall through */ | 304 | /* fall through */ |
303 | case ATOMIC_XOR32 + 4: | 305 | case ATOMIC_XOR32 + 4: |
304 | put_user(regs->r0, (int *)regs->p0); | 306 | put_user(regs->r0, up0); |
305 | regs->pc = ATOMIC_XOR32 + 6; | 307 | regs->pc = ATOMIC_XOR32 + 6; |
306 | break; | 308 | break; |
307 | } | 309 | } |
diff --git a/arch/blackfin/kernel/ptrace.c b/arch/blackfin/kernel/ptrace.c index 85caf9b711a1..b4f062c172c6 100644 --- a/arch/blackfin/kernel/ptrace.c +++ b/arch/blackfin/kernel/ptrace.c | |||
@@ -193,6 +193,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
193 | { | 193 | { |
194 | int ret; | 194 | int ret; |
195 | int add = 0; | 195 | int add = 0; |
196 | unsigned long __user *datap = (unsigned long __user *)data; | ||
196 | 197 | ||
197 | switch (request) { | 198 | switch (request) { |
198 | /* when I and D space are separate, these will need to be fixed. */ | 199 | /* when I and D space are separate, these will need to be fixed. */ |
@@ -229,7 +230,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
229 | pr_debug("ptrace: copied size %d [0x%08lx]\n", copied, tmp); | 230 | pr_debug("ptrace: copied size %d [0x%08lx]\n", copied, tmp); |
230 | if (copied != sizeof(tmp)) | 231 | if (copied != sizeof(tmp)) |
231 | break; | 232 | break; |
232 | ret = put_user(tmp, (unsigned long *)data); | 233 | ret = put_user(tmp, datap); |
233 | break; | 234 | break; |
234 | } | 235 | } |
235 | 236 | ||
@@ -263,7 +264,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
263 | } else { | 264 | } else { |
264 | tmp = get_reg(child, addr); | 265 | tmp = get_reg(child, addr); |
265 | } | 266 | } |
266 | ret = put_user(tmp, (unsigned long *)data); | 267 | ret = put_user(tmp, datap); |
267 | break; | 268 | break; |
268 | } | 269 | } |
269 | 270 | ||
@@ -389,7 +390,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) | |||
389 | { | 390 | { |
390 | 391 | ||
391 | /* Get all gp regs from the child. */ | 392 | /* Get all gp regs from the child. */ |
392 | ret = ptrace_getregs(child, (void __user *)data); | 393 | ret = ptrace_getregs(child, datap); |
393 | break; | 394 | break; |
394 | } | 395 | } |
395 | 396 | ||
diff --git a/arch/blackfin/kernel/signal.c b/arch/blackfin/kernel/signal.c index 5564c9588aa8..71cfcd28b39f 100644 --- a/arch/blackfin/kernel/signal.c +++ b/arch/blackfin/kernel/signal.c | |||
@@ -55,13 +55,13 @@ struct rt_sigframe { | |||
55 | struct ucontext uc; | 55 | struct ucontext uc; |
56 | }; | 56 | }; |
57 | 57 | ||
58 | asmlinkage int sys_sigaltstack(const stack_t * uss, stack_t * uoss) | 58 | asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) |
59 | { | 59 | { |
60 | return do_sigaltstack(uss, uoss, rdusp()); | 60 | return do_sigaltstack(uss, uoss, rdusp()); |
61 | } | 61 | } |
62 | 62 | ||
63 | static inline int | 63 | static inline int |
64 | rt_restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *pr0) | 64 | rt_restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *pr0) |
65 | { | 65 | { |
66 | unsigned long usp = 0; | 66 | unsigned long usp = 0; |
67 | int err = 0; | 67 | int err = 0; |
diff --git a/arch/blackfin/kernel/sys_bfin.c b/arch/blackfin/kernel/sys_bfin.c index abcd14817d0e..efb7b25a2633 100644 --- a/arch/blackfin/kernel/sys_bfin.c +++ b/arch/blackfin/kernel/sys_bfin.c | |||
@@ -49,7 +49,7 @@ | |||
49 | * sys_pipe() is the normal C calling standard for creating | 49 | * sys_pipe() is the normal C calling standard for creating |
50 | * a pipe. It's not the way unix traditionally does this, though. | 50 | * a pipe. It's not the way unix traditionally does this, though. |
51 | */ | 51 | */ |
52 | asmlinkage int sys_pipe(unsigned long *fildes) | 52 | asmlinkage int sys_pipe(unsigned long __user *fildes) |
53 | { | 53 | { |
54 | int fd[2]; | 54 | int fd[2]; |
55 | int error; | 55 | int error; |
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index 56a67ab698c7..e8e8f735c236 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
@@ -506,7 +506,7 @@ asmlinkage void trap_c(struct pt_regs *fp) | |||
506 | 506 | ||
507 | info.si_signo = sig; | 507 | info.si_signo = sig; |
508 | info.si_errno = 0; | 508 | info.si_errno = 0; |
509 | info.si_addr = (void *)fp->pc; | 509 | info.si_addr = (void __user *)fp->pc; |
510 | force_sig_info(sig, &info, current); | 510 | force_sig_info(sig, &info, current); |
511 | 511 | ||
512 | trace_buffer_restore(j); | 512 | trace_buffer_restore(j); |
diff --git a/include/asm-blackfin/signal.h b/include/asm-blackfin/signal.h index 0250429b736a..87951d251458 100644 --- a/include/asm-blackfin/signal.h +++ b/include/asm-blackfin/signal.h | |||
@@ -143,7 +143,7 @@ struct sigaction { | |||
143 | #endif /* __KERNEL__ */ | 143 | #endif /* __KERNEL__ */ |
144 | 144 | ||
145 | typedef struct sigaltstack { | 145 | typedef struct sigaltstack { |
146 | void *ss_sp; | 146 | void __user *ss_sp; |
147 | int ss_flags; | 147 | int ss_flags; |
148 | size_t ss_size; | 148 | size_t ss_size; |
149 | } stack_t; | 149 | } stack_t; |