linux-next/arch/loongarch
Stephen Brennan 1a7d0890dd kprobe/ftrace: bail out if ftrace was killed
If an error happens in ftrace, ftrace_kill() will prevent disarming
kprobes. Eventually, the ftrace_ops associated with the kprobes will be
freed, yet the kprobes will still be active, and when triggered, they
will use the freed memory, likely resulting in a page fault and panic.

This behavior can be reproduced quite easily, by creating a kprobe and
then triggering a ftrace_kill(). For simplicity, we can simulate an
ftrace error with a kernel module like [1]:

[1]: https://github.com/brenns10/kernel_stuff/tree/master/ftrace_killer

  sudo perf probe --add commit_creds
  sudo perf trace -e probe:commit_creds
  # In another terminal
  make
  sudo insmod ftrace_killer.ko  # calls ftrace_kill(), simulating bug
  # Back to perf terminal
  # ctrl-c
  sudo perf probe --del commit_creds

After a short period, a page fault and panic would occur as the kprobe
continues to execute and uses the freed ftrace_ops. While ftrace_kill()
is supposed to be used only in extreme circumstances, it is invoked in
FTRACE_WARN_ON() and so there are many places where an unexpected bug
could be triggered, yet the system may continue operating, possibly
without the administrator noticing. If ftrace_kill() does not panic the
system, then we should do everything we can to continue operating,
rather than leave a ticking time bomb.

Link: https://lore.kernel.org/all/20240501162956.229427-1-stephen.s.brennan@oracle.com/

Signed-off-by: Stephen Brennan <stephen.s.brennan@oracle.com>
Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Acked-by: Guo Ren <guoren@kernel.org>
Reviewed-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
2024-05-16 07:23:30 +09:00
..
boot LoongArch: Update dts for Loongson-2K2000 to support GMAC/GNET 2024-04-10 21:08:51 +08:00
configs LoongArch changes for v6.8 2024-01-19 13:30:49 -08:00
crypto LoongArch/crypto: Clean up useless assignment operations 2024-03-19 15:50:34 +08:00
include LoongArch: Fix callchain parse error with kernel tracepoint events 2024-04-24 12:36:07 +08:00
kernel kprobe/ftrace: bail out if ftrace was killed 2024-05-16 07:23:30 +09:00
kvm LoongArch changes for v6.9 2024-03-22 10:22:45 -07:00
lib LoongArch: Add ORC stack unwinder support 2024-03-11 22:23:47 +08:00
mm LoongArch: Fix access error when read fault on a write-only VMA 2024-04-24 12:36:07 +08:00
net LoongArch: BPF: Prevent out-of-bounds memory access 2024-01-17 12:43:13 +08:00
pci LoongArch: Add FDT booting support from efi system table 2022-12-14 08:41:53 +08:00
power LoongArch: Export some arch-specific pm interfaces 2023-06-29 20:58:44 +08:00
vdso LoongArch: Add ORC stack unwinder support 2024-03-11 22:23:47 +08:00
Kbuild LoongArch: Allow device trees be built into the kernel 2024-01-17 12:43:00 +08:00
Kconfig LoongArch: Fix Kconfig item and left code related to CRASH_CORE 2024-04-24 12:36:07 +08:00
Kconfig.debug LoongArch: Add ORC stack unwinder support 2024-03-11 22:23:47 +08:00
Makefile LoongArch changes for v6.9 2024-03-22 10:22:45 -07:00