android_kernel_samsung_sm8650/arch/m68k/kernel
Michael Schmitz 54fa25ffab m68k: Only force 030 bus error if PC not in exception table
[ Upstream commit e36a82bebbf7da814530d5a179bef9df5934b717 ]

__get_kernel_nofault() does copy data in supervisor mode when
forcing a task backtrace log through /proc/sysrq_trigger.
This is expected cause a bus error exception on e.g. NULL
pointer dereferencing when logging a kernel task has no
workqueue associated. This bus error ought to be ignored.

Our 030 bus error handler is ill equipped to deal with this:

Whenever ssw indicates a kernel mode access on a data fault,
we don't even attempt to handle the fault and instead always
send a SEGV signal (or panic). As a result, the check
for exception handling at the fault PC (buried in
send_sig_fault() which gets called from do_page_fault()
eventually) is never used.

In contrast, both 040 and 060 access error handlers do not
care whether a fault happened on supervisor mode access,
and will call do_page_fault() on those, ultimately honoring
the exception table.

Add a check in bus_error030 to call do_page_fault() in case
we do have an entry for the fault PC in our exception table.

I had attempted a fix for this earlier in 2019 that did rely
on testing pagefault_disabled() (see link below) to achieve
the same thing, but this patch should be more generic.

Tested on 030 Atari Falcon.

Reported-by: Eero Tamminen <oak@helsinkinet.fi>
Link: https://lore.kernel.org/r/alpine.LNX.2.21.1904091023540.25@nippy.intranet
Link: https://lore.kernel.org/r/63130691-1984-c423-c1f2-73bfd8d3dcd3@gmail.com
Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/20230301021107.26307-1-schmitzmic@gmail.com
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-03-30 12:49:17 +02:00
..
syscalls arch: syscalls: simplify uapi/kapi directory creation 2022-03-31 12:03:46 +09:00
.gitignore
asm-offsets.c
bootinfo_proc.c
dma.c
early_printk.c
entry.S m68k: Check syscall_trace_enter() return code 2023-03-10 09:33:51 +01:00
head.S m68k: Introduce a virtual m68k machine 2022-04-11 11:48:01 +02:00
ints.c
irq.c
machine_kexec.c
Makefile kbuild: use obj-y instead extra-y for objects placed at the head 2022-10-02 18:04:05 +09:00
module.c
pcibios.c
process.c This set of changes updates init and user mode helper tasks to be 2022-06-03 16:03:05 -07:00
ptrace.c m68knommu: changes for linux 5.19 2022-05-30 10:56:18 -07:00
relocate_kernel.S
setup_mm.c m68k: mm: Move initrd phys_to_virt handling after paging_init() 2023-03-17 08:50:26 +01:00
setup_no.c More power management updates for 5.19-rc1 2022-05-30 11:37:26 -07:00
setup.c
signal.c signal: Deliver SIGTRAP on perf event asynchronously if blocked 2022-04-22 12:14:05 +02:00
sun3-head.S
sys_m68k.c
syscalltable.S
time.c m68knommu: fix undefined reference to `mach_get_rtc_pll' 2022-05-25 00:03:58 +10:00
traps.c m68k: Only force 030 bus error if PC not in exception table 2023-03-30 12:49:17 +02:00
uboot.c
vectors.c
vmlinux-nommu.lds
vmlinux-std.lds
vmlinux-sun3.lds
vmlinux.lds.S