linux/arch/mips/kernel
Maciej W. Rozycki 5a1aca4469 MIPS: Fix FCSR Cause bit handling for correct SIGFPE issue
Sanitize FCSR Cause bit handling, following a trail of past attempts:

* commit 4249548454 ("MIPS: ptrace: Fix FP context restoration FCSR
regression"),

* commit 443c44032a ("MIPS: Always clear FCSR cause bits after
emulation"),

* commit 64bedffe49 ("MIPS: Clear [MSA]FPE CSR.Cause after
notify_die()"),

* commit b1442d39fa ("MIPS: Prevent user from setting FCSR cause
bits"),

* commit b54d2901517d ("Properly handle branch delay slots in connection
with signals.").

Specifically do not mask these bits out in ptrace(2) processing and send
a SIGFPE signal instead whenever a matching pair of an FCSR Cause and
Enable bit is seen as execution of an affected context is about to
resume.  Only then clear Cause bits, and even then do not clear any bits
that are set but masked with the respective Enable bits.  Adjust Cause
bit clearing throughout code likewise, except within the FPU emulator
proper where they are set according to IEEE 754 exceptions raised as the
operation emulated executed.  Do so so that any IEEE 754 exceptions
subject to their default handling are recorded like with operations
executed by FPU hardware.

Signed-off-by: Maciej W. Rozycki <macro@imgtec.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/14460/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
2016-11-04 01:28:41 +01:00
..
.gitignore
8250-platform.c
asm-offsets.c MIPS: KVM: Drop now unused asm offsets 2016-07-05 16:08:48 +02:00
binfmt_elfn32.c MIPS: kernel: Audit and remove any unnecessary uses of module.h 2016-10-05 01:31:20 +02:00
binfmt_elfo32.c MIPS: kernel: Audit and remove any unnecessary uses of module.h 2016-10-05 01:31:20 +02:00
bmips_5xxx_init.S MIPS: BMIPS: Make whitespacely correct. 2016-05-09 12:00:01 +02:00
bmips_vec.S MIPS: BMIPS: Add Whirlwind (BMIPS5200) initialization code 2016-05-09 12:00:01 +02:00
branch.c MIPS: tracing: disable uprobe/kprobe on compact branch instructions 2016-10-06 17:37:40 +02:00
cevt-bcm1480.c MIPS: cevt-bcm1480: Migrate to new 'set-state' interface 2015-09-03 12:07:51 +02:00
cevt-ds1287.c MIPS: cevt-ds1287: Migrate to new 'set-state' interface 2015-09-03 12:07:51 +02:00
cevt-gt641xx.c MIPS: cevt-gt641xx: Migrate to new 'set-state' interface 2015-09-03 12:07:51 +02:00
cevt-r4k.c MIPS: Fix r4k clockevents registration 2016-07-24 11:59:48 +02:00
cevt-sb1250.c MIPS: cevt-sb1250: Migrate to new 'set-state' interface 2015-09-03 12:07:52 +02:00
cevt-txx9.c MIPS: cevt-txx9: Migrate to new 'set-state' interface 2015-09-03 12:07:53 +02:00
cps-vec-ns16550.S MIPS: CPS: Early debug using an ns16550-compatible UART 2015-11-11 08:34:25 +01:00
cps-vec.S MIPS: CPS: Copy EVA configuration when starting secondary VPs. 2016-05-28 12:35:05 +02:00
cpu-bugs64.c tree-wide: replace config_enabled() with IS_ENABLED() 2016-08-04 08:50:07 -04:00
cpu-probe.c MIPS: clear execution hazard after changing FTLB enable 2016-09-29 18:59:49 +02:00
crash_dump.c mips: Convert pr_warning to pr_warn 2014-11-24 07:44:51 +01:00
crash.c mips/panic: replace smp_send_stop() with kdump friendly version in panic path 2016-10-11 15:06:32 -07:00
csrc-bcm1480.c MIPS: csrc-bcm1480: Implement read_sched_clock 2015-04-01 17:21:27 +02:00
csrc-ioasic.c MIPS: csrc-ioasic: Implement read_sched_clock 2015-04-01 17:21:28 +02:00
csrc-r4k.c MIPS: Don't register r4k sched clock when CPUFREQ enabled 2016-07-24 12:00:15 +02:00
csrc-sb1250.c MIPS: csrc-sb1250: Implement read_sched_clock 2015-04-01 17:21:33 +02:00
early_printk_8250.c
early_printk.c
elf.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2016-08-06 09:13:11 -04:00
entry.S MIPS: kernel: entry.S: Set correct ISA level for mips_ihb 2015-04-10 15:41:46 +02:00
ftrace.c ftrace: Add return address pointer to ftrace_ret_stack 2016-08-24 12:15:14 +02:00
genex.S MIPS: Fix BUILD_ROLLBACK_PROLOGUE for microMIPS 2016-09-29 18:59:49 +02:00
gpio_txx9.c MIPS: txx9: switch to gpiochip_add_data() 2016-02-19 09:51:44 +01:00
head.S MIPS: store the appended dtb address in a variable 2016-08-02 14:00:16 +02:00
i8253.c
idle.c MIPS: Loongson: Add Loongson-3A R2 basic support 2016-05-13 14:02:14 +02:00
irq_txx9.c
irq-gt641xx.c
irq-msc01.c
irq-rm7000.c
irq.c MIPS: Clear Status IPL field when using EIC 2016-05-28 12:35:02 +02:00
jump_label.c jump_label: Rename JUMP_LABEL_{EN,DIS}ABLE to JUMP_LABEL_{JMP,NOP} 2015-08-03 11:34:12 +02:00
kgdb.c MIPS: Get rid of 'kgdb_early_setup' cruft. 2015-06-21 21:54:10 +02:00
kprobes.c MIPS: tracing: disable uprobe/kprobe on compact branch instructions 2016-10-06 17:37:40 +02:00
linux32.c MIPS: kernel: Audit and remove any unnecessary uses of module.h 2016-10-05 01:31:20 +02:00
machine_kexec.c mips/panic: replace smp_send_stop() with kdump friendly version in panic path 2016-10-11 15:06:32 -07:00
Makefile MIPS: Factor o32 specific code into signal_o32.c 2016-08-02 11:02:35 +02:00
mcount.S MIPS: mcount: Adjust stack pointer for static trace in MIPS32 2014-09-26 11:41:17 +02:00
mips_ksyms.c MIPS: uaccess: Take EVA into account in [__]clear_user 2015-12-22 11:58:43 +01:00
mips_machine.c
mips-cm.c tree-wide: replace config_enabled() with IS_ENABLED() 2016-08-04 08:50:07 -04:00
mips-cpc.c MIPS: CPC: Provide default mips_cpc_default_phys_base to ignore CPC 2016-11-04 00:17:46 +01:00
mips-mt-fpaff.c MIPS: Fix sched_getaffinity with MT FPAFF enabled 2015-08-03 09:25:02 +02:00
mips-mt.c
mips-r2-to-r6-emul.c MIPS: Fix FCSR Cause bit handling for correct SIGFPE issue 2016-11-04 01:28:41 +01:00
module-rela.c MIPS: module: fix incorrect IS_ERR_VALUE macro usages 2016-05-13 14:02:11 +02:00
module.c MIPS: Migrate exception table users off module.h and onto extable.h 2016-10-04 16:13:57 +02:00
octeon_switch.S MIPS: Fix octeon FP context switch handling 2015-10-02 19:16:06 +02:00
perf_event_mipsxx.c MIPS: perf: Fix I6400 event numbers 2016-05-17 11:05:07 +02:00
perf_event.c perf core: Add a 'nr' field to perf_event_callchain_context 2016-05-16 23:11:51 -03:00
pm-cps.c MIPS: pm-cps: Generate idle state entry code when CPUs are onlined 2016-10-05 01:31:20 +02:00
pm.c MIPS: Fix watchpoint restoration 2016-05-09 12:00:02 +02:00
probes-common.h MIPS: tracing: disable uprobe/kprobe on compact branch instructions 2016-10-06 17:37:40 +02:00
proc.c MIPS: Move identification of VP(E) into proc.c from smp-mt.c 2016-10-04 16:13:57 +02:00
process.c nmi_backtrace: add more trigger_*_cpu_backtrace() methods 2016-10-07 18:46:30 -07:00
prom.c MIPS: Fix build with CONFIG_OF=y for non OF-enabled targets 2015-08-03 09:25:00 +02:00
ptrace32.c mm: replace access_process_vm() write parameter with gup_flags 2016-10-19 08:31:25 -07:00
ptrace.c MIPS: Fix FCSR Cause bit handling for correct SIGFPE issue 2016-11-04 01:28:41 +01:00
r4k_fpu.S MIPS: Use copy_s.fmt rather than copy_u.fmt 2016-05-09 12:00:04 +02:00
r4k_switch.S MIPS: Remove redundant asm/pgtable-bits.h inclusions 2016-05-13 15:30:25 +02:00
r2300_fpu.S MIPS: Avoid variant of .type unsupported by LLVM Assembler 2016-02-29 11:23:49 +01:00
r2300_switch.S MIPS: Fix R2300 FP context switch handling 2015-10-02 19:16:46 +02:00
r6000_fpu.S MIPS: Fix build with binutils 2.24.51+ 2014-11-07 15:07:36 +01:00
relocate_kernel.S MIPS: Replace add and sub instructions in relocate_kernel.S with addiu 2015-08-03 15:26:30 +02:00
relocate.c MIPS: KASLR: Fix handling of NULL FDT 2016-11-04 00:30:49 +01:00
reset.c MIPS: Provide fallback reboot/poweroff/halt implementations 2015-04-01 17:21:58 +02:00
rtlx-cmp.c MIPS: APRP: Fix an issue when device_create() fails. 2014-08-01 17:30:35 +02:00
rtlx-mt.c MIPS: APRP: Fix an issue when device_create() fails. 2014-08-01 17:30:35 +02:00
rtlx.c MIPS: rtlx: Remove KERN_DEBUG from pr_debug() arguments in rtlx.c 2014-11-24 07:44:04 +01:00
scall32-o32.S MIPS: Wire up new pkey_{mprotect,alloc,free} syscalls 2016-10-14 11:05:13 -07:00
scall64-64.S MIPS: Wire up new pkey_{mprotect,alloc,free} syscalls 2016-10-14 11:05:13 -07:00
scall64-n32.S MIPS: Wire up new pkey_{mprotect,alloc,free} syscalls 2016-10-14 11:05:13 -07:00
scall64-o32.S MIPS: Wire up new pkey_{mprotect,alloc,free} syscalls 2016-10-14 11:05:13 -07:00
segment.c MIPS: Print segment physical address when EU=1 2016-07-28 11:44:30 +02:00
setup.c MIPS: Fix detection of unsupported highmem with cache aliases 2016-09-29 18:59:49 +02:00
signal32.c MIPS: Factor o32 specific code into signal_o32.c 2016-08-02 11:02:35 +02:00
signal_n32.c MIPS: Initial implementation of a VDSO 2015-11-11 08:36:36 +01:00
signal_o32.c MIPS: Factor o32 specific code into signal_o32.c 2016-08-02 11:02:35 +02:00
signal-common.h MIPS: Save MSA extended context around signals 2015-09-03 12:07:59 +02:00
signal.c Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2016-08-06 09:13:11 -04:00
smp-bmips.c MIPS: SMP: Update cpu_foreign_map on CPU disable 2016-07-29 10:19:28 +02:00
smp-cmp.c MIPS: Make smp CMP, CPS and MT use the new generic IPI functions 2016-02-25 10:56:58 +01:00
smp-cps.c MIPS: smp-cps: Avoid BUG() when offlining pre-r6 CPUs 2016-09-29 18:59:49 +02:00
smp-mt.c MIPS: Move identification of VP(E) into proc.c from smp-mt.c 2016-10-04 16:13:57 +02:00
smp-up.c
smp.c MIPS: kernel: Audit and remove any unnecessary uses of module.h 2016-10-05 01:31:20 +02:00
spinlock_test.c MIPS: Declare mips_debugfs_dir in a header 2015-10-26 09:49:42 +01:00
spram.c MIPS: Add P6600 cases to CPU switch statements 2016-05-13 14:01:52 +02:00
stacktrace.c MIPS: Add LATENCYTOP support 2015-11-11 08:36:46 +01:00
sync-r4k.c MIPS: sync-r4k: reduce skew while synchronization 2016-01-24 01:31:51 +01:00
syscall.c MIPS: kernel: syscall: Set the appropriate ISA level for MIPS R6 2015-02-17 15:37:29 +00:00
sysrq.c MIPS: Refactor dumping of TLB registers for r3k/r4k 2015-09-03 12:07:45 +02:00
time.c
topology.c
traps.c MIPS: Fix FCSR Cause bit handling for correct SIGFPE issue 2016-11-04 01:28:41 +01:00
unaligned.c tree-wide: replace config_enabled() with IS_ENABLED() 2016-08-04 08:50:07 -04:00
uprobes.c MIPS: tracing: disable uprobe/kprobe on compact branch instructions 2016-10-06 17:37:40 +02:00
vdso.c MIPS: vDSO: Fix Malta EVA mapping to vDSO page structs 2016-09-21 15:56:10 +02:00
vmlinux.lds.S nmi_backtrace: generate one-line reports for idle cpus 2016-10-07 18:46:30 -07:00
vpe-cmp.c
vpe-mt.c
vpe.c module: use a structure to encapsulate layout. 2015-12-04 22:46:25 +01:00
watch.c MIPS: Add and use watch register field definitions 2016-05-13 14:02:13 +02:00