linux-stable/arch/riscv/kernel
Guo Ren 87f48c7ccc
riscv: kprobe: Fixup kernel panic when probing an illegal position
The kernel would panic when probed for an illegal position. eg:

(CONFIG_RISCV_ISA_C=n)

echo 'p:hello kernel_clone+0x16 a0=%a0' >> kprobe_events
echo 1 > events/kprobes/hello/enable
cat trace

Kernel panic - not syncing: stack-protector: Kernel stack
is corrupted in: __do_sys_newfstatat+0xb8/0xb8
CPU: 0 PID: 111 Comm: sh Not tainted
6.2.0-rc1-00027-g2d398fe49a4d #490
Hardware name: riscv-virtio,qemu (DT)
Call Trace:
[<ffffffff80007268>] dump_backtrace+0x38/0x48
[<ffffffff80c5e83c>] show_stack+0x50/0x68
[<ffffffff80c6da28>] dump_stack_lvl+0x60/0x84
[<ffffffff80c6da6c>] dump_stack+0x20/0x30
[<ffffffff80c5ecf4>] panic+0x160/0x374
[<ffffffff80c6db94>] generic_handle_arch_irq+0x0/0xa8
[<ffffffff802deeb0>] sys_newstat+0x0/0x30
[<ffffffff800158c0>] sys_clone+0x20/0x30
[<ffffffff800039e8>] ret_from_syscall+0x0/0x4
---[ end Kernel panic - not syncing: stack-protector:
Kernel stack is corrupted in: __do_sys_newfstatat+0xb8/0xb8 ]---

That is because the kprobe's ebreak instruction broke the kernel's
original code. The user should guarantee the correction of the probe
position, but it couldn't make the kernel panic.

This patch adds arch_check_kprobe in arch_prepare_kprobe to prevent an
illegal position (Such as the middle of an instruction).

Fixes: c22b0bcb1d ("riscv: Add kprobes supported")
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Reviewed-by: Björn Töpel <bjorn@kernel.org>
Link: https://lore.kernel.org/r/20230201040604.3390509-1-guoren@kernel.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
2023-02-01 20:49:55 -08:00
..
compat_vdso
probes riscv: kprobe: Fixup kernel panic when probing an illegal position 2023-02-01 20:49:55 -08:00
vdso
.gitignore
alternative.c
asm-offsets.c
cacheinfo.c
compat_signal.c
compat_syscall_table.c
cpu_ops_sbi.c
cpu_ops_spinwait.c
cpu_ops.c
cpu-hotplug.c
cpu.c RISC-V Patches for the 6.2 Merge Window, Part 1 2022-12-14 15:23:49 -08:00
cpufeature.c
crash_core.c
crash_dump.c
crash_save_regs.S
efi-header.S
efi.c
elf_kexec.c
entry.S Merge patch series "RISC-V: Align the shadow stack" 2022-12-12 09:30:37 -08:00
fpu.S
ftrace.c
head.h
head.S riscv: fix -Wundef warning for CONFIG_RISCV_BOOT_SPINWAIT 2023-01-19 16:37:11 -08:00
image-vars.h
irq.c
jump_label.c
kexec_relocate.S
kgdb.c
machine_kexec_file.c
machine_kexec.c
Makefile
mcount-dyn.S
mcount.S
module-sections.c
module.c
patch.c
perf_callchain.c
perf_regs.c
process.c
ptrace.c
reset.c
riscv_ksyms.c
sbi.c
setup.c
signal.c
smp.c
smpboot.c riscv: Move call to init_cpu_topology() to later initialization stage 2023-01-25 07:20:00 -08:00
soc.c
stacktrace.c
suspend_entry.S
suspend.c
sys_riscv.c
syscall_table.c
time.c
trace_irq.c
trace_irq.h
traps_misaligned.c
traps.c Merge patch series "RISC-V: Align the shadow stack" 2022-12-12 09:30:37 -08:00
vdso.c
vmlinux-xip.lds.S
vmlinux.lds.S