|
@@ -2083,51 +2083,6 @@ long asmlinkage compat_sys_nfsservctl(int cmd, void *notused, void *notused2)
|
|
|
|
|
|
#ifdef CONFIG_EPOLL
|
|
#ifdef CONFIG_EPOLL
|
|
|
|
|
|
-#ifdef CONFIG_HAS_COMPAT_EPOLL_EVENT
|
|
|
|
-asmlinkage long compat_sys_epoll_ctl(int epfd, int op, int fd,
|
|
|
|
- struct compat_epoll_event __user *event)
|
|
|
|
-{
|
|
|
|
- long err = 0;
|
|
|
|
- struct compat_epoll_event user;
|
|
|
|
- struct epoll_event __user *kernel = NULL;
|
|
|
|
-
|
|
|
|
- if (event) {
|
|
|
|
- if (copy_from_user(&user, event, sizeof(user)))
|
|
|
|
- return -EFAULT;
|
|
|
|
- kernel = compat_alloc_user_space(sizeof(struct epoll_event));
|
|
|
|
- err |= __put_user(user.events, &kernel->events);
|
|
|
|
- err |= __put_user(user.data, &kernel->data);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return err ? err : sys_epoll_ctl(epfd, op, fd, kernel);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-asmlinkage long compat_sys_epoll_wait(int epfd,
|
|
|
|
- struct compat_epoll_event __user *events,
|
|
|
|
- int maxevents, int timeout)
|
|
|
|
-{
|
|
|
|
- long i, ret, err = 0;
|
|
|
|
- struct epoll_event __user *kbuf;
|
|
|
|
- struct epoll_event ev;
|
|
|
|
-
|
|
|
|
- if ((maxevents <= 0) ||
|
|
|
|
- (maxevents > (INT_MAX / sizeof(struct epoll_event))))
|
|
|
|
- return -EINVAL;
|
|
|
|
- kbuf = compat_alloc_user_space(sizeof(struct epoll_event) * maxevents);
|
|
|
|
- ret = sys_epoll_wait(epfd, kbuf, maxevents, timeout);
|
|
|
|
- for (i = 0; i < ret; i++) {
|
|
|
|
- err |= __get_user(ev.events, &kbuf[i].events);
|
|
|
|
- err |= __get_user(ev.data, &kbuf[i].data);
|
|
|
|
- err |= __put_user(ev.events, &events->events);
|
|
|
|
- err |= __put_user_unaligned(ev.data, &events->data);
|
|
|
|
- events++;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return err ? -EFAULT: ret;
|
|
|
|
-}
|
|
|
|
-#endif /* CONFIG_HAS_COMPAT_EPOLL_EVENT */
|
|
|
|
-
|
|
|
|
#ifdef TIF_RESTORE_SIGMASK
|
|
#ifdef TIF_RESTORE_SIGMASK
|
|
asmlinkage long compat_sys_epoll_pwait(int epfd,
|
|
asmlinkage long compat_sys_epoll_pwait(int epfd,
|
|
struct compat_epoll_event __user *events,
|
|
struct compat_epoll_event __user *events,
|
|
@@ -2153,11 +2108,7 @@ asmlinkage long compat_sys_epoll_pwait(int epfd,
|
|
sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved);
|
|
sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved);
|
|
}
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_HAS_COMPAT_EPOLL_EVENT
|
|
|
|
- err = compat_sys_epoll_wait(epfd, events, maxevents, timeout);
|
|
|
|
-#else
|
|
|
|
err = sys_epoll_wait(epfd, events, maxevents, timeout);
|
|
err = sys_epoll_wait(epfd, events, maxevents, timeout);
|
|
-#endif
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
* If we changed the signal mask, we need to restore the original one.
|
|
* If we changed the signal mask, we need to restore the original one.
|