lkml.org 
[lkml]   [2010]   [Aug]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[020/111] signalfd: fill in ssi_int for posix timers and message queues
    2.6.32-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Nathan Lynch <ntl@pobox.com>

    commit a2a20c412c86e0bb46a9ab0dd31bcfe6d201b913 upstream.

    If signalfd is used to consume a signal generated by a POSIX interval
    timer or POSIX message queue, the ssi_int field does not reflect the data
    (sigevent->sigev_value) supplied to timer_create(2) or mq_notify(3). (The
    ssi_ptr field, however, is filled in.)

    This behavior differs from signalfd's treatment of sigqueue-generated
    signals -- see the default case in signalfd_copyinfo. It also gives
    results that differ from the case when a signal is handled conventionally
    via a sigaction-registered handler.

    So, set signalfd_siginfo->ssi_int in the remaining cases (__SI_TIMER,
    __SI_MESGQ) where ssi_ptr is set.

    akpm: a non-back-compatible change. Merge into -stable to minimise the
    number of kernels which are in the field and which miss this feature.

    Signed-off-by: Nathan Lynch <ntl@pobox.com>
    Acked-by: Davide Libenzi <davidel@xmailserver.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

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

    --- a/fs/signalfd.c
    +++ b/fs/signalfd.c
    @@ -87,6 +87,7 @@ static int signalfd_copyinfo(struct sign
    err |= __put_user(kinfo->si_tid, &uinfo->ssi_tid);
    err |= __put_user(kinfo->si_overrun, &uinfo->ssi_overrun);
    err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr);
    + err |= __put_user(kinfo->si_int, &uinfo->ssi_int);
    break;
    case __SI_POLL:
    err |= __put_user(kinfo->si_band, &uinfo->ssi_band);
    @@ -110,6 +111,7 @@ static int signalfd_copyinfo(struct sign
    err |= __put_user(kinfo->si_pid, &uinfo->ssi_pid);
    err |= __put_user(kinfo->si_uid, &uinfo->ssi_uid);
    err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr);
    + err |= __put_user(kinfo->si_int, &uinfo->ssi_int);
    break;
    default:
    /*



    \
     
     \ /
      Last update: 2010-08-12 02:45    [W:0.020 / U:1.520 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site