diff options
author | Oleg Nesterov <oleg@redhat.com> | 2013-07-03 18:08:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-03 19:08:01 -0400 |
commit | 77d55918029ef4626bfd6ba716728dcc7d919de3 (patch) | |
tree | 4f1bc204e9bc1da041868cb2a1746eb67c523feb /fs/eventpoll.c | |
parent | 29000caecbe87b6b66f144f72111f0d02fbbf0c1 (diff) |
signals: eventpoll: do not use sigprocmask()
sigprocmask() should die. None of the current callers actually
need this strange interface.
Change fs/eventpoll.c to use set_current_blocked(). This also
means we should not worry about SIGKILL/SIGSTOP.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Eric Wong <normalperson@yhbt.net>
Cc: Jason Baron <jbaron@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/eventpoll.c')
-rw-r--r-- | fs/eventpoll.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/eventpoll.c b/fs/eventpoll.c index deecc7294a67..0f0f73624a88 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c | |||
@@ -1975,8 +1975,8 @@ SYSCALL_DEFINE6(epoll_pwait, int, epfd, struct epoll_event __user *, events, | |||
1975 | return -EINVAL; | 1975 | return -EINVAL; |
1976 | if (copy_from_user(&ksigmask, sigmask, sizeof(ksigmask))) | 1976 | if (copy_from_user(&ksigmask, sigmask, sizeof(ksigmask))) |
1977 | return -EFAULT; | 1977 | return -EFAULT; |
1978 | sigdelsetmask(&ksigmask, sigmask(SIGKILL) | sigmask(SIGSTOP)); | 1978 | sigsaved = current->blocked; |
1979 | sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved); | 1979 | set_current_blocked(&ksigmask); |
1980 | } | 1980 | } |
1981 | 1981 | ||
1982 | error = sys_epoll_wait(epfd, events, maxevents, timeout); | 1982 | error = sys_epoll_wait(epfd, events, maxevents, timeout); |
@@ -1993,7 +1993,7 @@ SYSCALL_DEFINE6(epoll_pwait, int, epfd, struct epoll_event __user *, events, | |||
1993 | sizeof(sigsaved)); | 1993 | sizeof(sigsaved)); |
1994 | set_restore_sigmask(); | 1994 | set_restore_sigmask(); |
1995 | } else | 1995 | } else |
1996 | sigprocmask(SIG_SETMASK, &sigsaved, NULL); | 1996 | set_current_blocked(&sigsaved); |
1997 | } | 1997 | } |
1998 | 1998 | ||
1999 | return error; | 1999 | return error; |
@@ -2020,8 +2020,8 @@ COMPAT_SYSCALL_DEFINE6(epoll_pwait, int, epfd, | |||
2020 | if (copy_from_user(&csigmask, sigmask, sizeof(csigmask))) | 2020 | if (copy_from_user(&csigmask, sigmask, sizeof(csigmask))) |
2021 | return -EFAULT; | 2021 | return -EFAULT; |
2022 | sigset_from_compat(&ksigmask, &csigmask); | 2022 | sigset_from_compat(&ksigmask, &csigmask); |
2023 | sigdelsetmask(&ksigmask, sigmask(SIGKILL) | sigmask(SIGSTOP)); | 2023 | sigsaved = current->blocked; |
2024 | sigprocmask(SIG_SETMASK, &ksigmask, &sigsaved); | 2024 | set_current_blocked(&ksigmask); |
2025 | } | 2025 | } |
2026 | 2026 | ||
2027 | err = sys_epoll_wait(epfd, events, maxevents, timeout); | 2027 | err = sys_epoll_wait(epfd, events, maxevents, timeout); |
@@ -2038,7 +2038,7 @@ COMPAT_SYSCALL_DEFINE6(epoll_pwait, int, epfd, | |||
2038 | sizeof(sigsaved)); | 2038 | sizeof(sigsaved)); |
2039 | set_restore_sigmask(); | 2039 | set_restore_sigmask(); |
2040 | } else | 2040 | } else |
2041 | sigprocmask(SIG_SETMASK, &sigsaved, NULL); | 2041 | set_current_blocked(&sigsaved); |
2042 | } | 2042 | } |
2043 | 2043 | ||
2044 | return err; | 2044 | return err; |