Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932954Ab0GTWml (ORCPT ); Tue, 20 Jul 2010 18:42:41 -0400 Received: from smtp1.linux-foundation.org ([140.211.169.13]:48899 "EHLO smtp1.linux-foundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932925Ab0GTWmk (ORCPT ); Tue, 20 Jul 2010 18:42:40 -0400 Date: Tue, 20 Jul 2010 15:42:05 -0700 From: Andrew Morton To: Nathan Lynch Cc: Linux Kernel Mailing List , Davide Libenzi , stable@kernel.org Subject: Re: [PATCH] signalfd: fill in ssi_int for posix timers and message queues Message-Id: <20100720154205.667e95aa.akpm@linux-foundation.org> In-Reply-To: <1278117528.21917.354.camel@localhost> References: <1278117528.21917.354.camel@localhost> X-Mailer: Sylpheed 2.4.8 (GTK+ 2.12.9; x86_64-pc-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2378 Lines: 58 On Fri, 02 Jul 2010 19:38:48 -0500 Nathan Lynch wrote: > 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. > This introduces an incompatibility between kernel versions. Someone develops and tests an application on 2.6.36 or later then ships it and lo, it malfunctions on 2.6.35 and earlier. Is there a way to avoid that? Don't think so. How should the more-awake-than-average application developer prevent this problem? Should he probe the syscall at runtime to determine its behaviour? He can't use the kernel version number because the kernel provider might have backported this patch into an earlier kernel. We can minimise the problem by backporting into -stable, and hoping that awake kernel packagers understand the issue, and backport the change as far as they can. So it's not 100% obvious that this change is desirable. Does the functionality which this patch adds justify the introduction of these problems? > --- > fs/signalfd.c | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/fs/signalfd.c b/fs/signalfd.c > index f329849..1c5a6ad 100644 > --- a/fs/signalfd.c > +++ b/fs/signalfd.c > @@ -88,6 +88,7 @@ static int signalfd_copyinfo(struct signalfd_siginfo __user *uinfo, > 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; hm, someone bollixed the __SI_TIMER indenting. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/