Subject: [PATCH v2 2/3] arm64: fpsimd: Fix bad si_code for undiagnosed SIGFPE

From: [email-masked] (Will Deacon)
Date: Fri, 9 Mar 2018 13:10:18 +0000

Hi Eric,

On Thu, Mar 08, 2018 at 04:40:12PM -0600, Eric W. Biederman wrote:
> Will Deacon <[email-masked]> writes:
> 
> > On Thu, Mar 01, 2018 at 05:44:07PM +0000, Dave Martin wrote:
> >> Currently a SIGFPE delivered in response to a floating-point
> >> exception trap may have si_code set to 0 on arm64.  As reported by
> >> Eric, this is a bad idea since this is the value of SI_USER -- yet
> >> this signal is definitely not the result of kill(2), tgkill(2) etc.
> >> and si_uid and si_pid make limited sense whereas we do want to
> >> yield a value for si_addr (which doesn't exist for SI_USER).
> >
> > [...]
> >
> >> diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
> >> index e7226c4..9040038 100644
> >> --- a/arch/arm64/kernel/fpsimd.c
> >> +++ b/arch/arm64/kernel/fpsimd.c
> >> @@ -39,6 +39,7 @@
> >>  #include <linux/slab.h>
> >>  #include <linux/sysctl.h>
> >>  
> >> +#include <asm/esr.h>
> >>  #include <asm/fpsimd.h>
> >>  #include <asm/cputype.h>
> >>  #include <asm/simd.h>
> >> @@ -867,18 +868,20 @@ asmlinkage void do_fpsimd_acc(unsigned int esr, struct pt_regs *regs)
> >>  asmlinkage void do_fpsimd_exc(unsigned int esr, struct pt_regs *regs)
> >>  {
> >>  	siginfo_t info;
> >> -	unsigned int si_code = FPE_FIXME;
> >> -
> >> -	if (esr & FPEXC_IOF)
> >> -		si_code = FPE_FLTINV;
> >> -	else if (esr & FPEXC_DZF)
> >> -		si_code = FPE_FLTDIV;
> >> -	else if (esr & FPEXC_OFF)
> >> -		si_code = FPE_FLTOVF;
> >> -	else if (esr & FPEXC_UFF)
> >> -		si_code = FPE_FLTUND;
> >> -	else if (esr & FPEXC_IXF)
> >> -		si_code = FPE_FLTRES;
> >> +	unsigned int si_code = FPE_FLTUNK;
> >
> > Happy to take this patch once the dependency on FPE_FLTUNK in core code is
> > resolved.
> 
> Would it help for me to take the FPE_FLTUNK patch into my siginfo-next
> branch?   So that there is a common branch with the code so we don't
> need to worry about conflicts.  If so I will look at that on Monday.

Yes please, that would be helpful actually. I can then pull that into
arm64 if you give me a stable branch or tag. Alternatively, I can define
FPE_FLTUNK locally and remove it at -rc1.

Cheers,

Will