diff options
-rw-r--r-- | fs/compat.c | 49 | ||||
-rw-r--r-- | include/linux/compat.h | 8 |
2 files changed, 0 insertions, 57 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. |
diff --git a/include/linux/compat.h b/include/linux/compat.h index ae0a483bef9b..a671dbff7a1f 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h | |||
@@ -257,16 +257,8 @@ asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid, | |||
257 | /* | 257 | /* |
258 | * epoll (fs/eventpoll.c) compat bits follow ... | 258 | * epoll (fs/eventpoll.c) compat bits follow ... |
259 | */ | 259 | */ |
260 | #ifndef CONFIG_HAS_COMPAT_EPOLL_EVENT | ||
261 | struct epoll_event; | 260 | struct epoll_event; |
262 | #define compat_epoll_event epoll_event | 261 | #define compat_epoll_event epoll_event |
263 | #else | ||
264 | asmlinkage long compat_sys_epoll_ctl(int epfd, int op, int fd, | ||
265 | struct compat_epoll_event __user *event); | ||
266 | asmlinkage long compat_sys_epoll_wait(int epfd, | ||
267 | struct compat_epoll_event __user *events, | ||
268 | int maxevents, int timeout); | ||
269 | #endif | ||
270 | asmlinkage long compat_sys_epoll_pwait(int epfd, | 262 | asmlinkage long compat_sys_epoll_pwait(int epfd, |
271 | struct compat_epoll_event __user *events, | 263 | struct compat_epoll_event __user *events, |
272 | int maxevents, int timeout, | 264 | int maxevents, int timeout, |