diff options
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 5 |
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 | */ |
2915 | void restore_user_sigmask(const void __user *usigmask, sigset_t *sigsaved) | 2915 | void 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; |