| Date | Wed, 16 Apr 2008 18:02:17 -0700 | From | Chris Wright <> | Subject | signalfd: fix for incorrect SI_QUEUE user data reporting |
| |
-stable review patch. If anyone has any objections, please let us know. ---------------------
From: Davide Libenzi <davidel@xmailserver.org>
upstream commit: 0859ab59a8a48d2a96b9d2b7100889bcb6bb5818
Michael Kerrisk found out that signalfd was not reporting back user data pushed using sigqueue:
http://groups.google.com/group/linux.kernel/msg/9397cab8551e3123
The following patch makes signalfd report back the ssi_ptr and ssi_int members of the signalfd_siginfo structure.
Signed-off-by: Davide Libenzi <davidel@xmailserver.org> Acked-by: Michael Kerrisk <mtk.manpages@googlemail.com> Cc: <stable@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Chris Wright <chrisw@sous-sol.org> --- fs/signalfd.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
--- a/fs/signalfd.c +++ b/fs/signalfd.c @@ -110,9 +110,14 @@ static int signalfd_copyinfo(struct sign err |= __put_user(kinfo->si_uid, &uinfo->ssi_uid); err |= __put_user((long) kinfo->si_ptr, &uinfo->ssi_ptr); break; - default: /* this is just in case for now ... */ + default: + /* + * This case catches also the signals queued by sigqueue(). + */ 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; } --
|