aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/signal.c')
-rw-r--r--kernel/signal.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/signal.c b/kernel/signal.c
index d622eac9d169..edf8915ddd54 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -2912,7 +2912,8 @@ EXPORT_SYMBOL(set_compat_user_sigmask);
2912 * This is useful for syscalls such as ppoll, pselect, io_pgetevents and 2912 * This is useful for syscalls such as ppoll, pselect, io_pgetevents and
2913 * epoll_pwait where a new sigmask is passed in from userland for the syscalls. 2913 * epoll_pwait where a new sigmask is passed in from userland for the syscalls.
2914 */ 2914 */
2915void restore_user_sigmask(const void __user *usigmask, sigset_t *sigsaved) 2915void restore_user_sigmask(const void __user *usigmask, sigset_t *sigsaved,
2916 bool interrupted)
2916{ 2917{
2917 2918
2918 if (!usigmask) 2919 if (!usigmask)
@@ -2922,7 +2923,7 @@ void restore_user_sigmask(const void __user *usigmask, sigset_t *sigsaved)
2922 * Restoring sigmask here can lead to delivering signals that the above 2923 * Restoring sigmask here can lead to delivering signals that the above
2923 * syscalls are intended to block because of the sigmask passed in. 2924 * syscalls are intended to block because of the sigmask passed in.
2924 */ 2925 */
2925 if (signal_pending(current)) { 2926 if (interrupted) {
2926 current->saved_sigmask = *sigsaved; 2927 current->saved_sigmask = *sigsaved;
2927 set_restore_sigmask(); 2928 set_restore_sigmask();
2928 return; 2929 return;