linux/arch/arc
Vineet Gupta 0d7b8855a0 ARCv2: STAR 9000808988: signals involving Delay Slot
Reported by Anton as LTP:munmap01 failing with Illegal Instruction
Exception.

   --------------------->8--------------------------------------
   mmap2(NULL, 24576, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0) = 0x200d2000
   munmap(0x200d2000, 24576)               = 0
   --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x200d2000}
   ---
   potentially unexpected fatal signal 4.
   Path: /munmap01
   CPU: 0 PID: 61 Comm: munmap01 Not tainted 3.13.0-g5d5c46d9a556 #8
   task: 9f1a8000 ti: 9f154000 task.ti: 9f154000

   [ECR   ]: 0x00020100 => Illegal Insn
   [EFA   ]: 0x0001354c
   [BLINK ]: 0x200515d4
   [ERET  ]: 0x1354c
       @off 0x1354c in [/munmap01]
       VMA: 0x00010000 to 0x00018000
   [STAT32]: 0x800802c0
   ...
   --------------------->8--------------------------------------

The issue was
1. munmap01 accessed unmapped memory (on purpose) with signal handler
   installed for SIGSEGV

2. The faulting instruction happened to be in Delay Slot
   00011864 <main>:
      11908:	bl.d       13284 <tst_resm>
      1190c:	stb        r16,[r2]

3. kernel sets up the reg file for signal handler and correctly clears
   the DE bit in pt_regs->status32 placeholder

4. However RESTORE_CALLEE_SAVED_USER macro is not adjusted for ARCv2,
   and it over-writes the above with orig/stale value of status32

5. After RTIE, userspace signal handler executes a non branch
   instruction with DE bit set, triggering Illegal Instruction Exception.

Reported-by: Anton Kolesov <akolesov@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
2015-06-22 14:06:55 +05:30
..
boot ARC: [axs101] STAR 9000799830: Fix SD cards support 2015-06-19 18:09:31 +05:30
configs ARC: [axs101] Add support for AXS101 SDP (software development platform) 2015-06-19 18:09:30 +05:30
include ARCv2: STAR 9000808988: signals involving Delay Slot 2015-06-22 14:06:55 +05:30
kernel ARCv2: STAR 9000808988: signals involving Delay Slot 2015-06-22 14:06:55 +05:30
lib ARC: switch to generic ENTRY/END assembler annotations 2014-03-26 14:31:28 +05:30
mm ARCv2: Support for ARCv2 ISA and HS38x cores 2015-06-22 14:06:55 +05:30
oprofile ARC: OProfile support 2013-02-15 23:16:00 +05:30
plat-axs10x ARC: [axs101] Add missing __init annotations 2015-06-19 18:09:32 +05:30
plat-sim ARC: [plat_arcfpga]->[plat_sim] 2015-06-19 18:09:26 +05:30
plat-tb10x ARC: [plat*] move code out of .init_machine into common 2014-10-13 14:46:13 +05:30
Kbuild ARC: Build system: Makefiles, Kconfig, Linker script 2013-02-11 20:00:25 +05:30
Kconfig ARCv2: Support for ARCv2 ISA and HS38x cores 2015-06-22 14:06:55 +05:30
Kconfig.debug ARC: With earlycon in use, retire EARLY_PRINTK 2015-05-11 11:20:21 +05:30
Makefile ARCv2: Support for ARCv2 ISA and HS38x cores 2015-06-22 14:06:55 +05:30