diff options
Diffstat (limited to 'fs/aio.c')
-rw-r--r-- | fs/aio.c | 20 |
1 files changed, 8 insertions, 12 deletions
@@ -2094,7 +2094,6 @@ SYSCALL_DEFINE6(io_pgetevents, | |||
2094 | const struct __aio_sigset __user *, usig) | 2094 | const struct __aio_sigset __user *, usig) |
2095 | { | 2095 | { |
2096 | struct __aio_sigset ksig = { NULL, }; | 2096 | struct __aio_sigset ksig = { NULL, }; |
2097 | sigset_t ksigmask, sigsaved; | ||
2098 | struct timespec64 ts; | 2097 | struct timespec64 ts; |
2099 | bool interrupted; | 2098 | bool interrupted; |
2100 | int ret; | 2099 | int ret; |
@@ -2105,14 +2104,14 @@ SYSCALL_DEFINE6(io_pgetevents, | |||
2105 | if (usig && copy_from_user(&ksig, usig, sizeof(ksig))) | 2104 | if (usig && copy_from_user(&ksig, usig, sizeof(ksig))) |
2106 | return -EFAULT; | 2105 | return -EFAULT; |
2107 | 2106 | ||
2108 | ret = set_user_sigmask(ksig.sigmask, &ksigmask, &sigsaved, ksig.sigsetsize); | 2107 | ret = set_user_sigmask(ksig.sigmask, ksig.sigsetsize); |
2109 | if (ret) | 2108 | if (ret) |
2110 | return ret; | 2109 | return ret; |
2111 | 2110 | ||
2112 | ret = do_io_getevents(ctx_id, min_nr, nr, events, timeout ? &ts : NULL); | 2111 | ret = do_io_getevents(ctx_id, min_nr, nr, events, timeout ? &ts : NULL); |
2113 | 2112 | ||
2114 | interrupted = signal_pending(current); | 2113 | interrupted = signal_pending(current); |
2115 | restore_user_sigmask(ksig.sigmask, &sigsaved, interrupted); | 2114 | restore_saved_sigmask_unless(interrupted); |
2116 | if (interrupted && !ret) | 2115 | if (interrupted && !ret) |
2117 | ret = -ERESTARTNOHAND; | 2116 | ret = -ERESTARTNOHAND; |
2118 | 2117 | ||
@@ -2130,7 +2129,6 @@ SYSCALL_DEFINE6(io_pgetevents_time32, | |||
2130 | const struct __aio_sigset __user *, usig) | 2129 | const struct __aio_sigset __user *, usig) |
2131 | { | 2130 | { |
2132 | struct __aio_sigset ksig = { NULL, }; | 2131 | struct __aio_sigset ksig = { NULL, }; |
2133 | sigset_t ksigmask, sigsaved; | ||
2134 | struct timespec64 ts; | 2132 | struct timespec64 ts; |
2135 | bool interrupted; | 2133 | bool interrupted; |
2136 | int ret; | 2134 | int ret; |
@@ -2142,14 +2140,14 @@ SYSCALL_DEFINE6(io_pgetevents_time32, | |||
2142 | return -EFAULT; | 2140 | return -EFAULT; |
2143 | 2141 | ||
2144 | 2142 | ||
2145 | ret = set_user_sigmask(ksig.sigmask, &ksigmask, &sigsaved, ksig.sigsetsize); | 2143 | ret = set_user_sigmask(ksig.sigmask, ksig.sigsetsize); |
2146 | if (ret) | 2144 | if (ret) |
2147 | return ret; | 2145 | return ret; |
2148 | 2146 | ||
2149 | ret = do_io_getevents(ctx_id, min_nr, nr, events, timeout ? &ts : NULL); | 2147 | ret = do_io_getevents(ctx_id, min_nr, nr, events, timeout ? &ts : NULL); |
2150 | 2148 | ||
2151 | interrupted = signal_pending(current); | 2149 | interrupted = signal_pending(current); |
2152 | restore_user_sigmask(ksig.sigmask, &sigsaved, interrupted); | 2150 | restore_saved_sigmask_unless(interrupted); |
2153 | if (interrupted && !ret) | 2151 | if (interrupted && !ret) |
2154 | ret = -ERESTARTNOHAND; | 2152 | ret = -ERESTARTNOHAND; |
2155 | 2153 | ||
@@ -2198,7 +2196,6 @@ COMPAT_SYSCALL_DEFINE6(io_pgetevents, | |||
2198 | const struct __compat_aio_sigset __user *, usig) | 2196 | const struct __compat_aio_sigset __user *, usig) |
2199 | { | 2197 | { |
2200 | struct __compat_aio_sigset ksig = { NULL, }; | 2198 | struct __compat_aio_sigset ksig = { NULL, }; |
2201 | sigset_t ksigmask, sigsaved; | ||
2202 | struct timespec64 t; | 2199 | struct timespec64 t; |
2203 | bool interrupted; | 2200 | bool interrupted; |
2204 | int ret; | 2201 | int ret; |
@@ -2209,14 +2206,14 @@ COMPAT_SYSCALL_DEFINE6(io_pgetevents, | |||
2209 | if (usig && copy_from_user(&ksig, usig, sizeof(ksig))) | 2206 | if (usig && copy_from_user(&ksig, usig, sizeof(ksig))) |
2210 | return -EFAULT; | 2207 | return -EFAULT; |
2211 | 2208 | ||
2212 | ret = set_compat_user_sigmask(ksig.sigmask, &ksigmask, &sigsaved, ksig.sigsetsize); | 2209 | ret = set_compat_user_sigmask(ksig.sigmask, ksig.sigsetsize); |
2213 | if (ret) | 2210 | if (ret) |
2214 | return ret; | 2211 | return ret; |
2215 | 2212 | ||
2216 | ret = do_io_getevents(ctx_id, min_nr, nr, events, timeout ? &t : NULL); | 2213 | ret = do_io_getevents(ctx_id, min_nr, nr, events, timeout ? &t : NULL); |
2217 | 2214 | ||
2218 | interrupted = signal_pending(current); | 2215 | interrupted = signal_pending(current); |
2219 | restore_user_sigmask(ksig.sigmask, &sigsaved, interrupted); | 2216 | restore_saved_sigmask_unless(interrupted); |
2220 | if (interrupted && !ret) | 2217 | if (interrupted && !ret) |
2221 | ret = -ERESTARTNOHAND; | 2218 | ret = -ERESTARTNOHAND; |
2222 | 2219 | ||
@@ -2234,7 +2231,6 @@ COMPAT_SYSCALL_DEFINE6(io_pgetevents_time64, | |||
2234 | const struct __compat_aio_sigset __user *, usig) | 2231 | const struct __compat_aio_sigset __user *, usig) |
2235 | { | 2232 | { |
2236 | struct __compat_aio_sigset ksig = { NULL, }; | 2233 | struct __compat_aio_sigset ksig = { NULL, }; |
2237 | sigset_t ksigmask, sigsaved; | ||
2238 | struct timespec64 t; | 2234 | struct timespec64 t; |
2239 | bool interrupted; | 2235 | bool interrupted; |
2240 | int ret; | 2236 | int ret; |
@@ -2245,14 +2241,14 @@ COMPAT_SYSCALL_DEFINE6(io_pgetevents_time64, | |||
2245 | if (usig && copy_from_user(&ksig, usig, sizeof(ksig))) | 2241 | if (usig && copy_from_user(&ksig, usig, sizeof(ksig))) |
2246 | return -EFAULT; | 2242 | return -EFAULT; |
2247 | 2243 | ||
2248 | ret = set_compat_user_sigmask(ksig.sigmask, &ksigmask, &sigsaved, ksig.sigsetsize); | 2244 | ret = set_compat_user_sigmask(ksig.sigmask, ksig.sigsetsize); |
2249 | if (ret) | 2245 | if (ret) |
2250 | return ret; | 2246 | return ret; |
2251 | 2247 | ||
2252 | ret = do_io_getevents(ctx_id, min_nr, nr, events, timeout ? &t : NULL); | 2248 | ret = do_io_getevents(ctx_id, min_nr, nr, events, timeout ? &t : NULL); |
2253 | 2249 | ||
2254 | interrupted = signal_pending(current); | 2250 | interrupted = signal_pending(current); |
2255 | restore_user_sigmask(ksig.sigmask, &sigsaved, interrupted); | 2251 | restore_saved_sigmask_unless(interrupted); |
2256 | if (interrupted && !ret) | 2252 | if (interrupted && !ret) |
2257 | ret = -ERESTARTNOHAND; | 2253 | ret = -ERESTARTNOHAND; |
2258 | 2254 | ||