Forgot to show the patch,

On 08/17, Oleg Nesterov wrote:
>
> And again, this is even documented. The change is trivial but user-space
> visible, it may confuse the (stupid) app which uses SIGIO + SA_SIGINFO
> without F_SETSIG.

Oleg.

Personally I do not really think this change is good idea. (and in any
case it should be re-diffed on top of Peter's OWN_EX patch).

Btw. _in theory_, "case 0" is not right wrt security_file_send_sigiotask(sig).
I think we shouldn't worry.

--- a/fs/fcntl.c
+++ b/fs/fcntl.c
@@ -431,6 +431,7 @@ static void send_sigio_to_task(struct ta
                               int fd,
                               int reason)
 {
+       siginfo_t si;
        /*
         * F_SETSIG can change ->signum lockless in parallel, make
         * sure we read it once and use the same value throughout.
@@ -439,33 +440,33 @@ static void send_sigio_to_task(struct ta
 
        if (!sigio_perm(p, fown, signum))
                return;
+       /* Queue a rt signal with the appropriate fd as its
+          value.  We use SI_SIGIO as the source, not 
+          SI_KERNEL, since kernel signals always get 
+          delivered even if we can't queue.  Failure to
+          queue in this case _should_ be reported; we fall
+          back to SIGIO in that case. --sct */
+       si.si_errno = 0;
+       si.si_fd    = fd;
+       si.si_code  = reason;
+       /* Make sure we are called with one of the POLL_*
+          reasons, otherwise we could leak kernel stack into
+          userspace.  */
+       BUG_ON((reason & __SI_MASK) != __SI_POLL);
+       if (reason - POLL_IN >= NSIGPOLL)
+               si.si_band  = ~0L;
+       else
+               si.si_band = band_table[reason - POLL_IN];
 
        switch (signum) {
-               siginfo_t si;
                default:
-                       /* Queue a rt signal with the appropriate fd as its
-                          value.  We use SI_SIGIO as the source, not 
-                          SI_KERNEL, since kernel signals always get 
-                          delivered even if we can't queue.  Failure to
-                          queue in this case _should_ be reported; we fall
-                          back to SIGIO in that case. --sct */
                        si.si_signo = signum;
-                       si.si_errno = 0;
-                       si.si_code  = reason;
-                       /* Make sure we are called with one of the POLL_*
-                          reasons, otherwise we could leak kernel stack into
-                          userspace.  */
-                       BUG_ON((reason & __SI_MASK) != __SI_POLL);
-                       if (reason - POLL_IN >= NSIGPOLL)
-                               si.si_band  = ~0L;
-                       else
-                               si.si_band = band_table[reason - POLL_IN];
-                       si.si_fd    = fd;
                        if (!group_send_sig_info(signum, &si, p))
                                break;
                /* fall-through: fall back on the old plain SIGIO signal */
                case 0:
-                       group_send_sig_info(SIGIO, SEND_SIG_PRIV, p);
+                       si.si_signo = SIGIO;
+                       group_send_sig_info(SIGIO, &si, p);
        }
 }
 


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
perfmon2-devel mailing list
perfmon2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perfmon2-devel

Reply via email to