diff options
Diffstat (limited to 'arch/mips/kernel/linux32.c')
| -rw-r--r-- | arch/mips/kernel/linux32.c | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/arch/mips/kernel/linux32.c b/arch/mips/kernel/linux32.c index fc4dd6c9dd80..30d433f14f93 100644 --- a/arch/mips/kernel/linux32.c +++ b/arch/mips/kernel/linux32.c | |||
| @@ -166,34 +166,6 @@ out: | |||
| 166 | return error; | 166 | return error; |
| 167 | } | 167 | } |
| 168 | 168 | ||
| 169 | asmlinkage long | ||
| 170 | sysn32_waitid(int which, compat_pid_t pid, | ||
| 171 | siginfo_t __user *uinfo, int options, | ||
| 172 | struct compat_rusage __user *uru) | ||
| 173 | { | ||
| 174 | struct rusage ru; | ||
| 175 | long ret; | ||
| 176 | mm_segment_t old_fs = get_fs(); | ||
| 177 | int si_signo; | ||
| 178 | |||
| 179 | if (!access_ok(VERIFY_WRITE, uinfo, sizeof(*uinfo))) | ||
| 180 | return -EFAULT; | ||
| 181 | |||
| 182 | set_fs (KERNEL_DS); | ||
| 183 | ret = sys_waitid(which, pid, uinfo, options, | ||
| 184 | uru ? (struct rusage __user *) &ru : NULL); | ||
| 185 | set_fs (old_fs); | ||
| 186 | |||
| 187 | if (__get_user(si_signo, &uinfo->si_signo)) | ||
| 188 | return -EFAULT; | ||
| 189 | if (ret < 0 || si_signo == 0) | ||
| 190 | return ret; | ||
| 191 | |||
| 192 | if (uru) | ||
| 193 | ret = put_compat_rusage(&ru, uru); | ||
| 194 | return ret; | ||
| 195 | } | ||
| 196 | |||
| 197 | #define RLIM_INFINITY32 0x7fffffff | 169 | #define RLIM_INFINITY32 0x7fffffff |
| 198 | #define RESOURCE32(x) ((x > RLIM_INFINITY32) ? RLIM_INFINITY32 : x) | 170 | #define RESOURCE32(x) ((x > RLIM_INFINITY32) ? RLIM_INFINITY32 : x) |
| 199 | 171 | ||
| @@ -572,151 +544,6 @@ asmlinkage long sys32_sync_file_range(int fd, int __pad, | |||
| 572 | flags); | 544 | flags); |
| 573 | } | 545 | } |
| 574 | 546 | ||
| 575 | /* Argument list sizes for sys_socketcall */ | ||
| 576 | #define AL(x) ((x) * sizeof(unsigned int)) | ||
| 577 | static unsigned char socketcall_nargs[18]={AL(0),AL(3),AL(3),AL(3),AL(2),AL(3), | ||
| 578 | AL(3),AL(3),AL(4),AL(4),AL(4),AL(6), | ||
| 579 | AL(6),AL(2),AL(5),AL(5),AL(3),AL(3)}; | ||
| 580 | #undef AL | ||
| 581 | |||
| 582 | /* | ||
| 583 | * System call vectors. | ||
| 584 | * | ||
| 585 | * Argument checking cleaned up. Saved 20% in size. | ||
| 586 | * This function doesn't need to set the kernel lock because | ||
| 587 | * it is set by the callees. | ||
| 588 | */ | ||
| 589 | |||
| 590 | asmlinkage long sys32_socketcall(int call, unsigned int __user *args32) | ||
| 591 | { | ||
| 592 | unsigned int a[6]; | ||
| 593 | unsigned int a0,a1; | ||
| 594 | int err; | ||
| 595 | |||
| 596 | extern asmlinkage long sys_socket(int family, int type, int protocol); | ||
| 597 | extern asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen); | ||
| 598 | extern asmlinkage long sys_connect(int fd, struct sockaddr __user *uservaddr, int addrlen); | ||
| 599 | extern asmlinkage long sys_listen(int fd, int backlog); | ||
| 600 | extern asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, int __user *upeer_addrlen); | ||
| 601 | extern asmlinkage long sys_getsockname(int fd, struct sockaddr __user *usockaddr, int __user *usockaddr_len); | ||
| 602 | extern asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr, int __user *usockaddr_len); | ||
| 603 | extern asmlinkage long sys_socketpair(int family, int type, int protocol, int __user *usockvec); | ||
| 604 | extern asmlinkage long sys_send(int fd, void __user * buff, size_t len, unsigned flags); | ||
| 605 | extern asmlinkage long sys_sendto(int fd, void __user * buff, size_t len, unsigned flags, | ||
| 606 | struct sockaddr __user *addr, int addr_len); | ||
| 607 | extern asmlinkage long sys_recv(int fd, void __user * ubuf, size_t size, unsigned flags); | ||
| 608 | extern asmlinkage long sys_recvfrom(int fd, void __user * ubuf, size_t size, unsigned flags, | ||
| 609 | struct sockaddr __user *addr, int __user *addr_len); | ||
| 610 | extern asmlinkage long sys_shutdown(int fd, int how); | ||
| 611 | extern asmlinkage long sys_setsockopt(int fd, int level, int optname, char __user *optval, int optlen); | ||
| 612 | extern asmlinkage long sys_getsockopt(int fd, int level, int optname, char __user *optval, int __user *optlen); | ||
| 613 | extern asmlinkage long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags); | ||
| 614 | extern asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned int flags); | ||
| 615 | |||
| 616 | |||
| 617 | if(call<1||call>SYS_RECVMSG) | ||
| 618 | return -EINVAL; | ||
| 619 | |||
| 620 | /* copy_from_user should be SMP safe. */ | ||
| 621 | if (copy_from_user(a, args32, socketcall_nargs[call])) | ||
| 622 | return -EFAULT; | ||
| 623 | |||
| 624 | a0=a[0]; | ||
| 625 | a1=a[1]; | ||
| 626 | |||
| 627 | switch(call) | ||
| 628 | { | ||
| 629 | case SYS_SOCKET: | ||
| 630 | err = sys_socket(a0,a1,a[2]); | ||
| 631 | break; | ||
| 632 | case SYS_BIND: | ||
| 633 | err = sys_bind(a0,(struct sockaddr __user *)A(a1), a[2]); | ||
| 634 | break; | ||
| 635 | case SYS_CONNECT: | ||
| 636 | err = sys_connect(a0, (struct sockaddr __user *)A(a1), a[2]); | ||
| 637 | break; | ||
| 638 | case SYS_LISTEN: | ||
| 639 | err = sys_listen(a0,a1); | ||
| 640 | break; | ||
| 641 | case SYS_ACCEPT: | ||
| 642 | err = sys_accept(a0,(struct sockaddr __user *)A(a1), (int __user *)A(a[2])); | ||
| 643 | break; | ||
| 644 | case SYS_GETSOCKNAME: | ||
| 645 | err = sys_getsockname(a0,(struct sockaddr __user *)A(a1), (int __user *)A(a[2])); | ||
| 646 | break; | ||
| 647 | case SYS_GETPEERNAME: | ||
| 648 | err = sys_getpeername(a0, (struct sockaddr __user *)A(a1), (int __user *)A(a[2])); | ||
| 649 | break; | ||
| 650 | case SYS_SOCKETPAIR: | ||
| 651 | err = sys_socketpair(a0,a1, a[2], (int __user *)A(a[3])); | ||
| 652 | break; | ||
| 653 | case SYS_SEND: | ||
| 654 | err = sys_send(a0, (void __user *)A(a1), a[2], a[3]); | ||
| 655 | break; | ||
| 656 | case SYS_SENDTO: | ||
| 657 | err = sys_sendto(a0,(void __user *)A(a1), a[2], a[3], | ||
| 658 | (struct sockaddr __user *)A(a[4]), a[5]); | ||
| 659 | break; | ||
| 660 | case SYS_RECV: | ||
| 661 | err = sys_recv(a0, (void __user *)A(a1), a[2], a[3]); | ||
| 662 | break; | ||
| 663 | case SYS_RECVFROM: | ||
| 664 | err = sys_recvfrom(a0, (void __user *)A(a1), a[2], a[3], | ||
| 665 | (struct sockaddr __user *)A(a[4]), (int __user *)A(a[5])); | ||
| 666 | break; | ||
| 667 | case SYS_SHUTDOWN: | ||
| 668 | err = sys_shutdown(a0,a1); | ||
| 669 | break; | ||
| 670 | case SYS_SETSOCKOPT: | ||
| 671 | err = sys_setsockopt(a0, a1, a[2], (char __user *)A(a[3]), a[4]); | ||
| 672 | break; | ||
| 673 | case SYS_GETSOCKOPT: | ||
| 674 | err = sys_getsockopt(a0, a1, a[2], (char __user *)A(a[3]), (int __user *)A(a[4])); | ||
| 675 | break; | ||
| 676 | case SYS_SENDMSG: | ||
| 677 | err = sys_sendmsg(a0, (struct msghdr __user *) A(a1), a[2]); | ||
| 678 | break; | ||
| 679 | case SYS_RECVMSG: | ||
| 680 | err = sys_recvmsg(a0, (struct msghdr __user *) A(a1), a[2]); | ||
| 681 | break; | ||
| 682 | default: | ||
| 683 | err = -EINVAL; | ||
| 684 | break; | ||
| 685 | } | ||
| 686 | return err; | ||
| 687 | } | ||
| 688 | |||
| 689 | struct sigevent32 { | ||
| 690 | u32 sigev_value; | ||
| 691 | u32 sigev_signo; | ||
| 692 | u32 sigev_notify; | ||
| 693 | u32 payload[(64 / 4) - 3]; | ||
| 694 | }; | ||
| 695 | |||
| 696 | extern asmlinkage long | ||
| 697 | sys_timer_create(clockid_t which_clock, | ||
| 698 | struct sigevent __user *timer_event_spec, | ||
| 699 | timer_t __user * created_timer_id); | ||
| 700 | |||
| 701 | long | ||
| 702 | sys32_timer_create(u32 clock, struct sigevent32 __user *se32, timer_t __user *timer_id) | ||
| 703 | { | ||
| 704 | struct sigevent __user *p = NULL; | ||
| 705 | if (se32) { | ||
| 706 | struct sigevent se; | ||
| 707 | p = compat_alloc_user_space(sizeof(struct sigevent)); | ||
| 708 | memset(&se, 0, sizeof(struct sigevent)); | ||
| 709 | if (get_user(se.sigev_value.sival_int, &se32->sigev_value) || | ||
| 710 | __get_user(se.sigev_signo, &se32->sigev_signo) || | ||
| 711 | __get_user(se.sigev_notify, &se32->sigev_notify) || | ||
| 712 | __copy_from_user(&se._sigev_un._pad, &se32->payload, | ||
| 713 | sizeof(se32->payload)) || | ||
| 714 | copy_to_user(p, &se, sizeof(se))) | ||
| 715 | return -EFAULT; | ||
| 716 | } | ||
| 717 | return sys_timer_create(clock, p, timer_id); | ||
| 718 | } | ||
| 719 | |||
| 720 | save_static_function(sys32_clone); | 547 | save_static_function(sys32_clone); |
| 721 | __attribute_used__ noinline static int | 548 | __attribute_used__ noinline static int |
| 722 | _sys32_clone(nabi_no_regargs struct pt_regs regs) | 549 | _sys32_clone(nabi_no_regargs struct pt_regs regs) |
