diff options
Diffstat (limited to 'arch/mips/kernel/syscall.c')
-rw-r--r-- | arch/mips/kernel/syscall.c | 48 |
1 files changed, 26 insertions, 22 deletions
diff --git a/arch/mips/kernel/syscall.c b/arch/mips/kernel/syscall.c index 332358430ff5..1da2eeb3ef9e 100644 --- a/arch/mips/kernel/syscall.c +++ b/arch/mips/kernel/syscall.c | |||
@@ -212,12 +212,12 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs) | |||
212 | int error; | 212 | int error; |
213 | char * filename; | 213 | char * filename; |
214 | 214 | ||
215 | filename = getname((char *) (long)regs.regs[4]); | 215 | filename = getname((char __user *) (long)regs.regs[4]); |
216 | error = PTR_ERR(filename); | 216 | error = PTR_ERR(filename); |
217 | if (IS_ERR(filename)) | 217 | if (IS_ERR(filename)) |
218 | goto out; | 218 | goto out; |
219 | error = do_execve(filename, (char **) (long)regs.regs[5], | 219 | error = do_execve(filename, (char __user *__user *) (long)regs.regs[5], |
220 | (char **) (long)regs.regs[6], ®s); | 220 | (char __user *__user *) (long)regs.regs[6], ®s); |
221 | putname(filename); | 221 | putname(filename); |
222 | 222 | ||
223 | out: | 223 | out: |
@@ -227,7 +227,7 @@ out: | |||
227 | /* | 227 | /* |
228 | * Compacrapability ... | 228 | * Compacrapability ... |
229 | */ | 229 | */ |
230 | asmlinkage int sys_uname(struct old_utsname * name) | 230 | asmlinkage int sys_uname(struct old_utsname __user * name) |
231 | { | 231 | { |
232 | if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) | 232 | if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) |
233 | return 0; | 233 | return 0; |
@@ -237,7 +237,7 @@ asmlinkage int sys_uname(struct old_utsname * name) | |||
237 | /* | 237 | /* |
238 | * Compacrapability ... | 238 | * Compacrapability ... |
239 | */ | 239 | */ |
240 | asmlinkage int sys_olduname(struct oldold_utsname * name) | 240 | asmlinkage int sys_olduname(struct oldold_utsname __user * name) |
241 | { | 241 | { |
242 | int error; | 242 | int error; |
243 | 243 | ||
@@ -274,7 +274,7 @@ void sys_set_thread_area(unsigned long addr) | |||
274 | asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | 274 | asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) |
275 | { | 275 | { |
276 | int tmp, len; | 276 | int tmp, len; |
277 | char *name; | 277 | char __user *name; |
278 | 278 | ||
279 | switch(cmd) { | 279 | switch(cmd) { |
280 | case SETNAME: { | 280 | case SETNAME: { |
@@ -283,7 +283,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | |||
283 | if (!capable(CAP_SYS_ADMIN)) | 283 | if (!capable(CAP_SYS_ADMIN)) |
284 | return -EPERM; | 284 | return -EPERM; |
285 | 285 | ||
286 | name = (char *) arg1; | 286 | name = (char __user *) arg1; |
287 | 287 | ||
288 | len = strncpy_from_user(nodename, name, __NEW_UTS_LEN); | 288 | len = strncpy_from_user(nodename, name, __NEW_UTS_LEN); |
289 | if (len < 0) | 289 | if (len < 0) |
@@ -324,7 +324,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) | |||
324 | * This is really horribly ugly. | 324 | * This is really horribly ugly. |
325 | */ | 325 | */ |
326 | asmlinkage int sys_ipc (uint call, int first, int second, | 326 | asmlinkage int sys_ipc (uint call, int first, int second, |
327 | unsigned long third, void *ptr, long fifth) | 327 | unsigned long third, void __user *ptr, long fifth) |
328 | { | 328 | { |
329 | int version, ret; | 329 | int version, ret; |
330 | 330 | ||
@@ -333,24 +333,25 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
333 | 333 | ||
334 | switch (call) { | 334 | switch (call) { |
335 | case SEMOP: | 335 | case SEMOP: |
336 | return sys_semtimedop (first, (struct sembuf *)ptr, second, | 336 | return sys_semtimedop (first, (struct sembuf __user *)ptr, |
337 | NULL); | 337 | second, NULL); |
338 | case SEMTIMEDOP: | 338 | case SEMTIMEDOP: |
339 | return sys_semtimedop (first, (struct sembuf *)ptr, second, | 339 | return sys_semtimedop (first, (struct sembuf __user *)ptr, |
340 | (const struct timespec __user *)fifth); | 340 | second, |
341 | (const struct timespec __user *)fifth); | ||
341 | case SEMGET: | 342 | case SEMGET: |
342 | return sys_semget (first, second, third); | 343 | return sys_semget (first, second, third); |
343 | case SEMCTL: { | 344 | case SEMCTL: { |
344 | union semun fourth; | 345 | union semun fourth; |
345 | if (!ptr) | 346 | if (!ptr) |
346 | return -EINVAL; | 347 | return -EINVAL; |
347 | if (get_user(fourth.__pad, (void **) ptr)) | 348 | if (get_user(fourth.__pad, (void *__user *) ptr)) |
348 | return -EFAULT; | 349 | return -EFAULT; |
349 | return sys_semctl (first, second, third, fourth); | 350 | return sys_semctl (first, second, third, fourth); |
350 | } | 351 | } |
351 | 352 | ||
352 | case MSGSND: | 353 | case MSGSND: |
353 | return sys_msgsnd (first, (struct msgbuf *) ptr, | 354 | return sys_msgsnd (first, (struct msgbuf __user *) ptr, |
354 | second, third); | 355 | second, third); |
355 | case MSGRCV: | 356 | case MSGRCV: |
356 | switch (version) { | 357 | switch (version) { |
@@ -360,7 +361,7 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
360 | return -EINVAL; | 361 | return -EINVAL; |
361 | 362 | ||
362 | if (copy_from_user(&tmp, | 363 | if (copy_from_user(&tmp, |
363 | (struct ipc_kludge *) ptr, | 364 | (struct ipc_kludge __user *) ptr, |
364 | sizeof (tmp))) | 365 | sizeof (tmp))) |
365 | return -EFAULT; | 366 | return -EFAULT; |
366 | return sys_msgrcv (first, tmp.msgp, second, | 367 | return sys_msgrcv (first, tmp.msgp, second, |
@@ -368,35 +369,38 @@ asmlinkage int sys_ipc (uint call, int first, int second, | |||
368 | } | 369 | } |
369 | default: | 370 | default: |
370 | return sys_msgrcv (first, | 371 | return sys_msgrcv (first, |
371 | (struct msgbuf *) ptr, | 372 | (struct msgbuf __user *) ptr, |
372 | second, fifth, third); | 373 | second, fifth, third); |
373 | } | 374 | } |
374 | case MSGGET: | 375 | case MSGGET: |
375 | return sys_msgget ((key_t) first, second); | 376 | return sys_msgget ((key_t) first, second); |
376 | case MSGCTL: | 377 | case MSGCTL: |
377 | return sys_msgctl (first, second, (struct msqid_ds *) ptr); | 378 | return sys_msgctl (first, second, |
379 | (struct msqid_ds __user *) ptr); | ||
378 | 380 | ||
379 | case SHMAT: | 381 | case SHMAT: |
380 | switch (version) { | 382 | switch (version) { |
381 | default: { | 383 | default: { |
382 | ulong raddr; | 384 | ulong raddr; |
383 | ret = do_shmat (first, (char *) ptr, second, &raddr); | 385 | ret = do_shmat (first, (char __user *) ptr, second, |
386 | &raddr); | ||
384 | if (ret) | 387 | if (ret) |
385 | return ret; | 388 | return ret; |
386 | return put_user (raddr, (ulong *) third); | 389 | return put_user (raddr, (ulong __user *) third); |
387 | } | 390 | } |
388 | case 1: /* iBCS2 emulator entry point */ | 391 | case 1: /* iBCS2 emulator entry point */ |
389 | if (!segment_eq(get_fs(), get_ds())) | 392 | if (!segment_eq(get_fs(), get_ds())) |
390 | return -EINVAL; | 393 | return -EINVAL; |
391 | return do_shmat (first, (char *) ptr, second, (ulong *) third); | 394 | return do_shmat (first, (char __user *) ptr, second, |
395 | (ulong *) third); | ||
392 | } | 396 | } |
393 | case SHMDT: | 397 | case SHMDT: |
394 | return sys_shmdt ((char *)ptr); | 398 | return sys_shmdt ((char __user *)ptr); |
395 | case SHMGET: | 399 | case SHMGET: |
396 | return sys_shmget (first, second, third); | 400 | return sys_shmget (first, second, third); |
397 | case SHMCTL: | 401 | case SHMCTL: |
398 | return sys_shmctl (first, second, | 402 | return sys_shmctl (first, second, |
399 | (struct shmid_ds *) ptr); | 403 | (struct shmid_ds __user *) ptr); |
400 | default: | 404 | default: |
401 | return -ENOSYS; | 405 | return -ENOSYS; |
402 | } | 406 | } |