From: "Eric W. Biederman" <ebiederm@xmission.com> To: linux-kernel@vger.kernel.org Cc: Andy Lutomirski <luto@kernel.org>, Linus Torvalds <torvalds@linux-foundation.org>, Al Viro <viro@zeniv.linux.org.uk>, Oleg Nesterov <oleg@redhat.com>, Andrei Vagin <avagin@virtuozzo.com>, Thomas Gleixner <tglx@linutronix.de>, Greg KH <greg@kroah.com>, Andrey Vagin <avagin@openvz.org>, Serge Hallyn <serge@hallyn.com>, Pavel Emelyanov <xemul@virtuozzo.com>, Cyrill Gorcunov <gorcunov@openvz.org>, Peter Zijlstra <peterz@infradead.org>, Willy Tarreau <w@1wt.eu>, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Linux Containers <containers@lists.linux-foundation.org>, Michael Kerrisk <mtk.manpages@gmail.com>, "Eric W. Biederman" <ebiederm@xmission.com>, "David S. Miller" <davem@davemloft.net>, sparclinux@vger.kernel.org Subject: [PATCH 3/8] signal/sparc: Document a conflict with SI_USER with SIGFPE Date: Fri, 30 Jun 2017 07:39:01 -0500 [thread overview] Message-ID: <20170630123906.8865-3-ebiederm@xmission.com> (raw) In-Reply-To: <87efu22set.fsf@xmission.com> Setting si_code to __SI_FAULT results in a userspace seeing an si_code of 0. This is the same si_code as SI_USER. Posix and common sense requires that SI_USER not be a signal specific si_code. As such this use of 0 for the si_code is a pretty horribly broken ABI. This was introduced in 2.3.41 so this mess has had a long time for people to be able to start depending on it. As this bug has existed for 17 years already I don't know if it is worth fixing. It is definitely worth documenting what is going on so that no one decides to copy this bad decision. Cc: "David S. Miller" <davem@davemloft.net> Cc: sparclinux@vger.kernel.org Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> --- arch/sparc/include/uapi/asm/siginfo.h | 5 +++++ arch/sparc/kernel/traps_32.c | 2 +- arch/sparc/kernel/traps_64.c | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/sparc/include/uapi/asm/siginfo.h b/arch/sparc/include/uapi/asm/siginfo.h index 2d9b79ccaa50..6bc5c677e92f 100644 --- a/arch/sparc/include/uapi/asm/siginfo.h +++ b/arch/sparc/include/uapi/asm/siginfo.h @@ -17,6 +17,11 @@ #define SI_NOINFO 32767 /* no information in siginfo_t */ /* + * SIGFPE si_codes + */ +#define FPE_FIXME (__SI_FAULT|0) /* Broken dup of SI_USER */ + +/* * SIGEMT si_codes */ #define EMT_TAGOVF (__SI_FAULT|1) /* tag overflow */ diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c index 466d4aed06c7..581cf35ee7e3 100644 --- a/arch/sparc/kernel/traps_32.c +++ b/arch/sparc/kernel/traps_32.c @@ -306,7 +306,7 @@ void do_fpe_trap(struct pt_regs *regs, unsigned long pc, unsigned long npc, info.si_errno = 0; info.si_addr = (void __user *)pc; info.si_trapno = 0; - info.si_code = __SI_FAULT; + info.si_code = FPE_FIXME; if ((fsr & 0x1c000) == (1 << 14)) { if (fsr & 0x10) info.si_code = FPE_FLTINV; diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c index 196ee5eb4d48..e882e128faa3 100644 --- a/arch/sparc/kernel/traps_64.c +++ b/arch/sparc/kernel/traps_64.c @@ -2258,7 +2258,7 @@ static void do_fpe_common(struct pt_regs *regs) info.si_errno = 0; info.si_addr = (void __user *)regs->tpc; info.si_trapno = 0; - info.si_code = __SI_FAULT; + info.si_code = FPE_FIXME; if ((fsr & 0x1c000) == (1 << 14)) { if (fsr & 0x10) info.si_code = FPE_FLTINV; -- 2.10.1
WARNING: multiple messages have this Message-ID (diff)
From: "Eric W. Biederman" <ebiederm@xmission.com> To: linux-kernel@vger.kernel.org Cc: Andy Lutomirski <luto@kernel.org>, Linus Torvalds <torvalds@linux-foundation.org>, Al Viro <viro@zeniv.linux.org.uk>, Oleg Nesterov <oleg@redhat.com>, Andrei Vagin <avagin@virtuozzo.com>, Thomas Gleixner <tglx@linutronix.de>, Greg KH <greg@kroah.com>, Andrey Vagin <avagin@openvz.org>, Serge Hallyn <serge@hallyn.com>, Pavel Emelyanov <xemul@virtuozzo.com>, Cyrill Gorcunov <gorcunov@openvz.org>, Peter Zijlstra <peterz@infradead.org>, Willy Tarreau <w@1wt.eu>, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Linux Containers <containers@lists.linux-foundation.org>, Michael Kerrisk <mtk.manpages@gmail.com>, "Eric W. Biederman" <ebiederm@xmission.com>, "David S. Miller" <davem@davemloft.net>, sparclinux@vger.kernel.org Subject: [PATCH 3/8] signal/sparc: Document a conflict with SI_USER with SIGFPE Date: Fri, 30 Jun 2017 12:39:01 +0000 [thread overview] Message-ID: <20170630123906.8865-3-ebiederm@xmission.com> (raw) In-Reply-To: <87efu22set.fsf@xmission.com> Setting si_code to __SI_FAULT results in a userspace seeing an si_code of 0. This is the same si_code as SI_USER. Posix and common sense requires that SI_USER not be a signal specific si_code. As such this use of 0 for the si_code is a pretty horribly broken ABI. This was introduced in 2.3.41 so this mess has had a long time for people to be able to start depending on it. As this bug has existed for 17 years already I don't know if it is worth fixing. It is definitely worth documenting what is going on so that no one decides to copy this bad decision. Cc: "David S. Miller" <davem@davemloft.net> Cc: sparclinux@vger.kernel.org Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> --- arch/sparc/include/uapi/asm/siginfo.h | 5 +++++ arch/sparc/kernel/traps_32.c | 2 +- arch/sparc/kernel/traps_64.c | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/sparc/include/uapi/asm/siginfo.h b/arch/sparc/include/uapi/asm/siginfo.h index 2d9b79ccaa50..6bc5c677e92f 100644 --- a/arch/sparc/include/uapi/asm/siginfo.h +++ b/arch/sparc/include/uapi/asm/siginfo.h @@ -17,6 +17,11 @@ #define SI_NOINFO 32767 /* no information in siginfo_t */ /* + * SIGFPE si_codes + */ +#define FPE_FIXME (__SI_FAULT|0) /* Broken dup of SI_USER */ + +/* * SIGEMT si_codes */ #define EMT_TAGOVF (__SI_FAULT|1) /* tag overflow */ diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c index 466d4aed06c7..581cf35ee7e3 100644 --- a/arch/sparc/kernel/traps_32.c +++ b/arch/sparc/kernel/traps_32.c @@ -306,7 +306,7 @@ void do_fpe_trap(struct pt_regs *regs, unsigned long pc, unsigned long npc, info.si_errno = 0; info.si_addr = (void __user *)pc; info.si_trapno = 0; - info.si_code = __SI_FAULT; + info.si_code = FPE_FIXME; if ((fsr & 0x1c000) = (1 << 14)) { if (fsr & 0x10) info.si_code = FPE_FLTINV; diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c index 196ee5eb4d48..e882e128faa3 100644 --- a/arch/sparc/kernel/traps_64.c +++ b/arch/sparc/kernel/traps_64.c @@ -2258,7 +2258,7 @@ static void do_fpe_common(struct pt_regs *regs) info.si_errno = 0; info.si_addr = (void __user *)regs->tpc; info.si_trapno = 0; - info.si_code = __SI_FAULT; + info.si_code = FPE_FIXME; if ((fsr & 0x1c000) = (1 << 14)) { if (fsr & 0x10) info.si_code = FPE_FLTINV; -- 2.10.1
next prev parent reply other threads:[~2017-06-30 12:49 UTC|newest] Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-06-29 23:57 RFC: bring UP 'lo' by default after creating new netns Mahesh Bandewar (महेश बंडेवार) 2017-06-30 1:08 ` Eric W. Biederman 2017-06-30 6:26 ` Mahesh Bandewar (महेश बंडेवार) 2017-06-30 12:38 ` [PATCH 1/8] signal/alpha: Document a conflict with SI_USER for SIGTRAP Eric W. Biederman 2017-06-30 12:38 ` Eric W. Biederman [not found] ` <20170630123906.8865-1-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2017-07-02 14:13 ` Helge Deller 2017-07-02 14:13 ` Helge Deller 2017-07-02 14:13 ` Helge Deller [not found] ` <20170702141320.GA32254-PwtjyNU/e7vkVFMGpb/cPg@public.gmane.org> 2017-07-14 10:59 ` Eric W. Biederman 2017-07-14 10:59 ` Eric W. Biederman 2017-07-14 10:59 ` Eric W. Biederman 2017-07-17 8:14 ` Michael Cree 2017-07-17 8:14 ` Michael Cree 2017-07-18 13:37 ` Eric W. Biederman 2017-07-18 13:37 ` Eric W. Biederman [not found] ` <87fudz5lol.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2017-07-17 8:14 ` Michael Cree 2017-06-30 12:39 ` [PATCH 2/8] signal/ia64: Document a conflict with SI_USER with SIGFPE Eric W. Biederman 2017-06-30 12:39 ` Eric W. Biederman 2017-06-30 12:39 ` Eric W. Biederman [this message] 2017-06-30 12:39 ` [PATCH 3/8] signal/sparc: " Eric W. Biederman 2017-06-30 16:45 ` David Miller 2017-06-30 16:45 ` David Miller [not found] ` <20170630.124505.736865959393416284.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org> 2017-06-30 18:13 ` Eric W. Biederman 2017-06-30 18:13 ` Eric W. Biederman 2017-06-30 18:13 ` Eric W. Biederman 2017-07-18 13:43 ` Eric W. Biederman 2017-07-18 13:43 ` Eric W. Biederman 2017-07-18 13:43 ` Eric W. Biederman [not found] ` <8737ahwdgr.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2017-07-18 13:43 ` Eric W. Biederman [not found] ` <20170630123906.8865-3-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2017-06-30 16:45 ` David Miller 2017-06-30 12:39 ` [PATCH 4/8] signal/mips: " Eric W. Biederman 2017-06-30 12:39 ` Eric W. Biederman 2017-06-30 12:39 ` [PATCH 6/8] signal/x86: Fix SIGSYS handling in copy_siginfo_to_user32 Eric W. Biederman 2017-06-30 12:39 ` Eric W. Biederman [not found] ` <87efu22set.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2017-06-30 12:38 ` [PATCH 1/8] signal/alpha: Document a conflict with SI_USER for SIGTRAP Eric W. Biederman 2017-06-30 12:39 ` [PATCH 2/8] signal/ia64: Document a conflict with SI_USER with SIGFPE Eric W. Biederman 2017-06-30 12:39 ` [PATCH 3/8] signal/sparc: " Eric W. Biederman 2017-06-30 12:39 ` [PATCH 4/8] signal/mips: " Eric W. Biederman 2017-06-30 12:39 ` [PATCH 5/8] signal/testing: Don't look for __SI_FAULT in userspace Eric W. Biederman 2017-06-30 12:39 ` Eric W. Biederman 2017-06-30 12:39 ` [PATCH 6/8] signal/x86: Fix SIGSYS handling in copy_siginfo_to_user32 Eric W. Biederman 2017-06-30 12:39 ` [PATCH 7/8] fcntl: Don't use ambiguous SIG_POLL si_codes Eric W. Biederman 2017-06-30 12:39 ` Eric W. Biederman 2017-06-30 12:39 ` [PATCH 8/8] signal: Remove kernel interal si_code magic Eric W. Biederman 2017-06-30 12:39 ` Eric W. Biederman [not found] ` <20170630123906.8865-8-ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org> 2017-07-12 22:36 ` Andrei Vagin 2017-07-12 22:36 ` Andrei Vagin [not found] ` <20170712223557.GA21885-1ViLX0X+lBJGNQ1M2rI3KwRV3xvJKrda@public.gmane.org> 2017-07-12 23:08 ` Eric W. Biederman 2017-07-12 23:08 ` Eric W. Biederman
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20170630123906.8865-3-ebiederm@xmission.com \ --to=ebiederm@xmission.com \ --cc=avagin@openvz.org \ --cc=avagin@virtuozzo.com \ --cc=containers@lists.linux-foundation.org \ --cc=davem@davemloft.net \ --cc=gorcunov@openvz.org \ --cc=greg@kroah.com \ --cc=linux-api@vger.kernel.org \ --cc=linux-arch@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=luto@kernel.org \ --cc=mtk.manpages@gmail.com \ --cc=oleg@redhat.com \ --cc=peterz@infradead.org \ --cc=serge@hallyn.com \ --cc=sparclinux@vger.kernel.org \ --cc=tglx@linutronix.de \ --cc=torvalds@linux-foundation.org \ --cc=viro@zeniv.linux.org.uk \ --cc=w@1wt.eu \ --cc=xemul@virtuozzo.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.