linux/arch/mips
Aleksandar Markovic 1ff8560ac9 MIPS: math-emu: CMP.Sxxx.<D|S>: Prevent occurrences of SIGILL crashes
Fix CMP.Sxxx.<D|S> SIGILL crashes by fixing main switch/case statement
in fpu_emul() function so that inadvertent fall-troughs are prevented.

Consider, let's say, CMP.SAF.S instruction when one of inputs is zero
and another input is a signaling NaN. The desired output is zero, and
the exception flag "invalid operation" set. For such case, the main
portion of the implementation is within "d_fmt" case of the main
"switch/case" statement in fpu_emul() function. The execution will
follow one of "if-else" branches that doesn't contain "goto cop1scr;"
statement, and will therefore reach the end of "d_fmt" case. It will
subsequently fall through to the next case, "l_fmt". After following
similar pattern, the execution will fall through to the succeeding
case, which is "default". The "default" case contains "return SIGILL;"
statement only. This means that the caller application will crash
with "illegal instruction" message.

It is obvious that above described fall-throughs are unnecessary and
harmful. This patch rectifies that behavior by providing "break;"
statements at the end of cases "d_fmt" and "l_fmt".

There are 22 instructions affected by this problem:

CMP.<SAF|SEQ|SLE|SLT|SNE|SOR|SUEQ|SULE|SULT|SUN|SUNE>.<D|S>.

Signed-off-by: Miodrag Dinic <miodrag.dinic@imgtec.com>
Signed-off-by: Goran Ferenc <goran.ferenc@imgtec.com>
Signed-off-by: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
Cc: Douglas Leung <douglas.leung@imgtec.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: Maciej W. Rozycki <macro@imgtec.com>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Petar Jovanovic <petar.jovanovic@imgtec.com>
Cc: Raghu Gandham <raghu.gandham@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/17140/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2017-08-29 15:21:56 +02:00
..
alchemy MIPS: Alchemy: Threaded carddetect irqs for devboards 2017-08-29 15:21:53 +02:00
ar7
ath25
ath79 MIPS: Convert to using %pOF instead of full_name 2017-08-29 15:21:50 +02:00
bcm47xx
bcm63xx
bmips
boot MIPS: Add Onion Omega2+ board 2017-08-29 15:21:54 +02:00
cavium-octeon MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
cobalt
configs MIPS: configs: Add Onion Omega2+ defconfig 2017-08-29 15:21:54 +02:00
dec MIPS: DEC: Fix an int-handler.S CPU_DADDI_WORKAROUNDS regression 2017-08-07 16:31:03 +02:00
emma
fw MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
generic MIPS: generic: Include asm/time.h for get_c0_*_int() 2017-08-29 15:21:54 +02:00
include MIPS: math-emu: Correct user fault_addr type 2017-08-29 15:21:55 +02:00
jazz
jz4740
kernel MIPS: Declare various variables & functions static 2017-08-29 15:21:55 +02:00
kvm PPC: 2017-07-06 18:38:31 -07:00
lantiq
lasat
lib MIPS: Include asm/delay.h for __{,n,u}delay() 2017-08-29 15:21:54 +02:00
loongson32
loongson64 MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
math-emu MIPS: math-emu: CMP.Sxxx.<D|S>: Prevent occurrences of SIGILL crashes 2017-08-29 15:21:56 +02:00
mm MIPS: Declare various variables & functions static 2017-08-29 15:21:55 +02:00
mti-malta
net MIPS: Add missing file for eBPF JIT. 2017-08-04 11:23:58 -07:00
netlogic MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
oprofile
paravirt MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
pci MIPS: pci-mt7620: explicitly request exclusive reset control 2017-08-29 15:21:51 +02:00
pic32
pistachio
pmcs-msp71xx
pnx833x
power
ralink MIPS: Add Onion Omega2+ board 2017-08-29 15:21:54 +02:00
rb532
sgi-ip22
sgi-ip27 MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
sgi-ip32
sibyte MIPS: SMP: Constify smp ops 2017-08-29 15:21:50 +02:00
sni
txx9
vdso MIPS: VDSO: Fix clobber lists in fallback code paths 2017-08-07 13:53:25 +02:00
vr41xx
xilfpga
Kbuild
Kbuild.platforms
Kconfig MIPS: Move r4k FP code from r4k_switch.S to r4k_fpu.S 2017-08-29 15:21:51 +02:00
Kconfig.debug
Makefile MIPS: Allow platform to specify multiple its.S files 2017-08-29 15:21:52 +02:00
Makefile.postlink