diff options
Diffstat (limited to 'fs/compat.c')
| -rw-r--r-- | fs/compat.c | 49 | 
1 files changed, 0 insertions, 49 deletions
| diff --git a/fs/compat.c b/fs/compat.c index 69baca5ad608..ee80ff341d37 100644 --- a/fs/compat.c +++ b/fs/compat.c | |||
| @@ -2083,51 +2083,6 @@ long asmlinkage compat_sys_nfsservctl(int cmd, void *notused, void *notused2) | |||
| 2083 | 2083 | ||
| 2084 | #ifdef CONFIG_EPOLL | 2084 | #ifdef CONFIG_EPOLL | 
| 2085 | 2085 | ||
| 2086 | #ifdef CONFIG_HAS_COMPAT_EPOLL_EVENT | ||
| 2087 | asmlinkage long compat_sys_epoll_ctl(int epfd, int op, int fd, | ||
| 2088 | struct compat_epoll_event __user *event) | ||
| 2089 | { | ||
| 2090 | long err = 0; | ||
| 2091 | struct compat_epoll_event user; | ||
| 2092 | struct epoll_event __user *kernel = NULL; | ||
| 2093 | |||
| 2094 | if (event) { | ||
| 2095 | if (copy_from_user(&user, event, sizeof(user))) | ||
| 2096 | return -EFAULT; | ||
| 2097 | kernel = compat_alloc_user_space(sizeof(struct epoll_event)); | ||
| 2098 | err |= __put_user(user.events, &kernel->events); | ||
| 2099 | err |= __put_user(user.data, &kernel->data); | ||
| 2100 | } | ||
| 2101 | |||
| 2102 | return err ? err : sys_epoll_ctl(epfd, op, fd, kernel); | ||
| 2103 | } | ||
| 2104 | |||
| 2105 | |||
| 2106 | asmlinkage long compat_sys_epoll_wait(int epfd, | ||
| 2107 | struct compat_epoll_event __user *events, | ||
| 2108 | int maxevents, int timeout) | ||
| 2109 | { | ||
| 2110 | long i, ret, err = 0; | ||
| 2111 | struct epoll_event __user *kbuf; | ||
| 2112 | struct epoll_event ev; | ||
| 2113 | |||
| 2114 | if ((maxevents <= 0) || | ||
| 2115 | (maxevents > (INT_MAX / sizeof(struct epoll_event)))) | ||
| 2116 | return -EINVAL; | ||
| 2117 | kbuf = compat_alloc_user_space(sizeof(struct epoll_event) * maxevents); | ||
| 2118 | ret = sys_epoll_wait(epfd, kbuf, maxevents, timeout); | ||
| 2119 | for (i = 0; i < ret; i++) { | ||
| 2120 | err |= __get_user(ev.events, &kbuf[i].events); | ||
| 2121 | err |= __get_user(ev.data, &kbuf[i].data); | ||
| 2122 | err |= __put_user(ev.events, &events->events); | ||
| 2123 | err |= __put_user_unaligned(ev.data, &events->data); | ||
| 2124 | events++; | ||
| 2125 | } | ||
| 2126 | |||
| 2127 | return err ? -EFAULT: ret; | ||
| 2128 | } | ||
| 2129 | #endif /* CONFIG_HAS_COMPAT_EPOLL_EVENT */ | ||
| 2130 | |||
| 2131 | #ifdef TIF_RESTORE_SIGMASK | 2086 | #ifdef TIF_RESTORE_SIGMASK | 
| 2132 | asmlinkage long compat_sys_epoll_pwait(int epfd, | 2087 | asmlinkage long compat_sys_epoll_pwait(int epfd, | 
| 2133 | struct compat_epoll_event __user *events, | 2088 | struct compat_epoll_event __user *events, | 
| @@ -2153,11 +2108,7 @@ asmlinkage long compat_sys_epoll_pwait(int epfd, | |||
| 2153 | sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved); | 2108 | sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved); | 
| 2154 | } | 2109 | } | 
| 2155 | 2110 | ||
| 2156 | #ifdef CONFIG_HAS_COMPAT_EPOLL_EVENT | ||
| 2157 | err = compat_sys_epoll_wait(epfd, events, maxevents, timeout); | ||
| 2158 | #else | ||
| 2159 | err = sys_epoll_wait(epfd, events, maxevents, timeout); | 2111 | err = sys_epoll_wait(epfd, events, maxevents, timeout); | 
| 2160 | #endif | ||
| 2161 | 2112 | ||
| 2162 | /* | 2113 | /* | 
| 2163 | * If we changed the signal mask, we need to restore the original one. | 2114 | * If we changed the signal mask, we need to restore the original one. | 
