On Mon, 22 Aug 2005, Chuck Ebbert wrote: > > i386 floating-point exception handling has a bug that can cause error > code 0 to be sent instead of the proper code during signal delivery.
Looking at your patch, I think it's too complicated. The fact is, none of the "switch()" cases even _care_ about bits "0x240" from swd. The bug itself seems to be that we even look at it. Wouldn't this simpler patch result in exactly the same behaviour? Linus --- diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c @@ -803,15 +803,14 @@ void math_error(void __user *eip) */ cwd = get_fpu_cwd(task); swd = get_fpu_swd(task); - switch (((~cwd) & swd & 0x3f) | (swd & 0x240)) { + switch (swd & ~cwd & 0x3f) { case 0x000: default: break; case 0x001: /* Invalid Op */ - case 0x041: /* Stack Fault */ - case 0x241: /* Stack Fault | Direction */ + /* swd & 0x240 == 0x040: Stack Fault */ + /* swd & 0x240 == 0x240: Stack Fault | Direction */ info.si_code = FPE_FLTINV; - /* Should we clear the SF or let user space do it ???? */ break; case 0x002: /* Denormalize */ case 0x010: /* Underflow */ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/