The new code in kernel/signal.c does not allow fetching private signals 
from another task. This patch avoid spurious POLLIN returns from a 
signalfd poll(2) operation.



Signed-off-by: Davide Libenzi <[EMAIL PROTECTED]>


- Davide


---
 fs/signalfd.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-2.6.mod/fs/signalfd.c
===================================================================
--- linux-2.6.mod.orig/fs/signalfd.c    2007-06-20 13:08:25.000000000 -0700
+++ linux-2.6.mod/fs/signalfd.c 2007-06-20 13:09:00.000000000 -0700
@@ -133,7 +133,8 @@
         * the peer disconnects.
         */
        if (signalfd_lock(ctx, &lk)) {
-               if (next_signal(&lk.tsk->pending, &ctx->sigmask) > 0 ||
+               if ((lk.tsk == current &&
+                    next_signal(&lk.tsk->pending, &ctx->sigmask) > 0) ||
                    next_signal(&lk.tsk->signal->shared_pending,
                                &ctx->sigmask) > 0)
                        events |= POLLIN;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to