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); |