|
@@ -363,7 +363,13 @@ static int __dequeue_signal(struct sigpending *pending, sigset_t *mask,
|
|
|
*/
|
|
|
int dequeue_signal(struct task_struct *tsk, sigset_t *mask, siginfo_t *info)
|
|
|
{
|
|
|
- int signr = __dequeue_signal(&tsk->pending, mask, info);
|
|
|
+ int signr = 0;
|
|
|
+
|
|
|
+ /* We only dequeue private signals from ourselves, we don't let
|
|
|
+ * signalfd steal them
|
|
|
+ */
|
|
|
+ if (tsk == current)
|
|
|
+ signr = __dequeue_signal(&tsk->pending, mask, info);
|
|
|
if (!signr) {
|
|
|
signr = __dequeue_signal(&tsk->signal->shared_pending,
|
|
|
mask, info);
|