From d99a2aa494cf6a23e9468b52e9d5c3d5e66b0cb3 Mon Sep 17 00:00:00 2001 From: Vegard Nossum Date: Sat, 16 May 2009 11:28:33 +0200 Subject: [PATCH] --- yaml --- r: 151478 b: refs/heads/master c: 7a0aeb14e18ad59394bd9bbc6e57fb345819e748 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/kernel/signal.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 9bb06f66dd55..3fbc25d41dd9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3b5c760efcddf1ebdd39a2035b554e96febd7466 +refs/heads/master: 7a0aeb14e18ad59394bd9bbc6e57fb345819e748 diff --git a/trunk/kernel/signal.c b/trunk/kernel/signal.c index 809a228019ad..d81f4952eebb 100644 --- a/trunk/kernel/signal.c +++ b/trunk/kernel/signal.c @@ -832,6 +832,7 @@ static int __send_signal(int sig, struct siginfo *info, struct task_struct *t, { struct sigpending *pending; struct sigqueue *q; + int override_rlimit; trace_sched_signal_send(sig, t); @@ -863,9 +864,13 @@ static int __send_signal(int sig, struct siginfo *info, struct task_struct *t, make sure at least one signal gets delivered and don't pass on the info struct. */ - q = __sigqueue_alloc(t, GFP_ATOMIC, (sig < SIGRTMIN && - (is_si_special(info) || - info->si_code >= 0))); + if (sig < SIGRTMIN) + override_rlimit = (is_si_special(info) || info->si_code >= 0); + else + override_rlimit = 0; + + q = __sigqueue_alloc(t, GFP_ATOMIC | __GFP_NOTRACK_FALSE_POSITIVE, + override_rlimit); if (q) { list_add_tail(&q->list, &pending->list); switch ((unsigned long) info) {