From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sasha Levin Subject: [PATCH AUTOSEL for 3.18 100/102] signal/metag: Document a conflict with SI_USER with SIGFPE Date: Mon, 19 Mar 2018 16:13:39 +0000 Message-ID: <20180319161117.17833-100-alexander.levin@microsoft.com> References: <20180319161117.17833-1-alexander.levin@microsoft.com> Mime-Version: 1.0 Content-Transfer-Encoding: quoted-printable Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=VlZYh/WnWbbTWnd3/wB1e92a/RZtUMp3ElhAtgc54Fs=; b=hBIiVHU58vrmY9hM8yhCqsCOF3pMtatz3i/8iph/T3u+PNomXkNsnB6/k6xnBx3B2wQTfFJcpw1UtzSBtALWvzVvXQ2juHvzA9dpeYadTvXDxKeTZhDS4igRqJgJqjxtRXr6RSNTzuGgRCcIEccGJ6f6989RixEj1KS+aYHbcLY= In-Reply-To: <20180319161117.17833-1-alexander.levin@microsoft.com> Content-Language: en-US Sender: stable-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii" To: "linux-kernel@vger.kernel.org" , "stable@vger.kernel.org" Cc: "Eric W. Biederman" , James Hogan , "linux-metag@vger.kernel.org" , Sasha Levin From: "Eric W. Biederman" [ Upstream commit b80328be53c215346b153769267b38f531d89b4f ] Setting si_code to 0 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. Further use of si_code =3D=3D 0 guaranteed that copy_siginfo_to_user saw a value of __SI_KILL and now sees a value of SIL_KILL with the result hat uid and pid fields are copied and which might copying the si_addr field by accident but certainly not by design. Making this a very flakey implementation. Utilizing FPE_FIXME siginfo_layout will now return SIL_FAULT and the appropriate fields will reliably be copied. Possible ABI fixes includee: - Send the signal without siginfo - Don't generate a signal - Possibly assign and use an appropriate si_code - Don't handle cases which can't happen Cc: James Hogan Cc: linux-metag@vger.kernel.org Ref: ac919f0883e5 ("metag: Traps") Signed-off-by: "Eric W. Biederman" Signed-off-by: Sasha Levin --- arch/metag/include/uapi/asm/siginfo.h | 7 +++++++ arch/metag/kernel/traps.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/arch/metag/include/uapi/asm/siginfo.h b/arch/metag/include/uap= i/asm/siginfo.h index b2e0c8b62aef..baac51cf30d9 100644 --- a/arch/metag/include/uapi/asm/siginfo.h +++ b/arch/metag/include/uapi/asm/siginfo.h @@ -5,4 +5,11 @@ =20 #include =20 +/* + * SIGFPE si_codes + */ +#ifdef __KERNEL__ +#define FPE_FIXME 0 /* Broken dup of SI_USER */ +#endif /* __KERNEL__ */ + #endif diff --git a/arch/metag/kernel/traps.c b/arch/metag/kernel/traps.c index 17b2e2e38d5a..6c4413c6a195 100644 --- a/arch/metag/kernel/traps.c +++ b/arch/metag/kernel/traps.c @@ -732,7 +732,7 @@ TBIRES fpe_handler(TBIRES State, int SigNum, int Trigge= rs, int Inst, PTBI pTBI) else if (error_state & TXSTAT_FPE_INEXACT_BIT) info.si_code =3D FPE_FLTRES; else - info.si_code =3D 0; + info.si_code =3D FPE_FIXME; info.si_errno =3D 0; info.si_addr =3D (__force void __user *)regs->ctx.CurrPC; force_sig_info(SIGFPE, &info, current); --=20 2.14.1