diff options
Diffstat (limited to 'fs/select.c')
| -rw-r--r-- | fs/select.c | 19 | 
1 files changed, 18 insertions, 1 deletions
| diff --git a/fs/select.c b/fs/select.c index fd38ce2e32e3..500a669f7790 100644 --- a/fs/select.c +++ b/fs/select.c | |||
| @@ -691,6 +691,23 @@ SYSCALL_DEFINE6(pselect6, int, n, fd_set __user *, inp, fd_set __user *, outp, | |||
| 691 | } | 691 | } | 
| 692 | #endif /* HAVE_SET_RESTORE_SIGMASK */ | 692 | #endif /* HAVE_SET_RESTORE_SIGMASK */ | 
| 693 | 693 | ||
| 694 | #ifdef __ARCH_WANT_SYS_OLD_SELECT | ||
| 695 | struct sel_arg_struct { | ||
| 696 | unsigned long n; | ||
| 697 | fd_set __user *inp, *outp, *exp; | ||
| 698 | struct timeval __user *tvp; | ||
| 699 | }; | ||
| 700 | |||
| 701 | SYSCALL_DEFINE1(old_select, struct sel_arg_struct __user *, arg) | ||
| 702 | { | ||
| 703 | struct sel_arg_struct a; | ||
| 704 | |||
| 705 | if (copy_from_user(&a, arg, sizeof(a))) | ||
| 706 | return -EFAULT; | ||
| 707 | return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); | ||
| 708 | } | ||
| 709 | #endif | ||
| 710 | |||
| 694 | struct poll_list { | 711 | struct poll_list { | 
| 695 | struct poll_list *next; | 712 | struct poll_list *next; | 
| 696 | int len; | 713 | int len; | 
| @@ -821,7 +838,7 @@ int do_sys_poll(struct pollfd __user *ufds, unsigned int nfds, | |||
| 821 | struct poll_list *walk = head; | 838 | struct poll_list *walk = head; | 
| 822 | unsigned long todo = nfds; | 839 | unsigned long todo = nfds; | 
| 823 | 840 | ||
| 824 | if (nfds > current->signal->rlim[RLIMIT_NOFILE].rlim_cur) | 841 | if (nfds > rlimit(RLIMIT_NOFILE)) | 
| 825 | return -EINVAL; | 842 | return -EINVAL; | 
| 826 | 843 | ||
| 827 | len = min_t(unsigned int, nfds, N_STACK_PPS); | 844 | len = min_t(unsigned int, nfds, N_STACK_PPS); | 
