diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/signal.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index fe590e00db8d..f9405609774e 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -363,7 +363,13 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask, | |||
363 | */ | 363 | */ |
364 | int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info) | 364 | int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info) |
365 | { | 365 | { |
366 | int signr = __dequeue_signal(&tsk->pending, mask, info); | 366 | int signr = 0; |
367 | |||
368 | /* We only dequeue private signals from ourselves, we don't let | ||
369 | * signalfd steal them | ||
370 | */ | ||
371 | if (tsk == current) | ||
372 | signr = __dequeue_signal(&tsk->pending, mask, info); | ||
367 | if (!signr) { | 373 | if (!signr) { |
368 | signr = __dequeue_signal(&tsk->signal->shared_pending, | 374 | signr = __dequeue_signal(&tsk->signal->shared_pending, |
369 | mask, info); | 375 | mask, info); |