linux-mainline/arch/m68k
Finn Thain b845b574f8 m68k: Move signal frame following exception on 68020/030
On 68030/020, an instruction such as, moveml %a2-%a3/%a5,%sp@- may cause
a stack page fault during instruction execution (i.e. not at an
instruction boundary) and produce a format 0xB exception frame.

In this situation, the value of USP will be unreliable.  If a signal is
to be delivered following the exception, this USP value is used to
calculate the location for a signal frame.  This can result in a
corrupted user stack.

The corruption was detected in dash (actually in glibc) where it showed
up as an intermittent "stack smashing detected" message and crash
following signal delivery for SIGCHLD.

It was hard to reproduce that failure because delivery of the signal
raced with the page fault and because the kernel places an unpredictable
gap of up to 7 bytes between the USP and the signal frame.

A format 0xB exception frame can be produced by a bus error or an
address error.  The 68030 Users Manual says that address errors occur
immediately upon detection during instruction prefetch.  The instruction
pipeline allows prefetch to overlap with other instructions, which means
an address error can arise during the execution of a different
instruction.  So it seems likely that this patch may help in the address
error case also.

Reported-and-tested-by: Stan Johnson <userm57@yahoo.com>
Link: https://lore.kernel.org/all/CAMuHMdW3yD22_ApemzW_6me3adq6A458u1_F0v-1EYwK_62jPA@mail.gmail.com/
Cc: Michael Schmitz <schmitzmic@gmail.com>
Cc: Andreas Schwab <schwab@linux-m68k.org>
Cc: stable@vger.kernel.org
Co-developed-by: Michael Schmitz <schmitzmic@gmail.com>
Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/9e66262a754fcba50208aa424188896cc52a1dd1.1683365892.git.fthain@linux-m68k.org
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
2023-05-22 13:51:20 +02:00
..
68000 m68knommu: updates and fixes for v6.3 2023-02-27 09:31:02 -08:00
amiga
apollo
atari
bvme6000
coldfire m68k: Check syscall_trace_enter() return code 2023-01-30 16:40:15 +01:00
configs m68k: defconfig: Update defconfigs for v6.3-rc1 2023-04-03 11:00:43 +02:00
emu tty: nfcon: use console_is_registered() 2022-12-02 11:25:01 +01:00
fpsp040
hp300
ifpsp060
include Locking changes in v6.4: 2023-05-05 12:56:55 -07:00
kernel m68k: Move signal frame following exception on 68020/030 2023-05-22 13:51:20 +02:00
lib
mac m68k: mac: Reword comment using double "in" 2022-11-01 12:17:56 +01:00
math-emu
mm m68k: mm: Fix systems with memory at end of 32-bit address space 2023-03-06 14:09:42 +01:00
mvme16x
mvme147
q40 m68k: q40: Do not initialise statics to 0 2023-01-30 16:39:43 +01:00
sun3
sun3x
tools/amiga
virt
install.sh
Kbuild
Kconfig Kconfig: introduce HAS_IOPORT option and select it as necessary 2023-04-05 22:15:19 +02:00
Kconfig.bus
Kconfig.cpu - Nick Piggin's "shoot lazy tlbs" series, to improve the peformance of 2023-04-27 19:42:02 -07:00
Kconfig.debug m68k: Remove obsolete config NO_KERNEL_MSG 2023-03-20 15:39:14 +01:00
Kconfig.devices m68k: /proc/hardware should depend on PROC_FS 2023-02-13 11:34:49 +01:00
Kconfig.machine m68knommu: updates and fixes for v6.4 2023-04-28 16:37:54 -07:00
Makefile kbuild: remove head-y syntax 2022-10-02 18:06:03 +09:00