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