All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] x86/kprobes: Fixes for CONFIG_RETHUNK
@ 2022-09-08  1:34 Masami Hiramatsu (Google)
  2022-09-08  1:34 ` [PATCH v2 1/2] x86/kprobes: Fix kprobes instruction boudary check with CONFIG_RETHUNK Masami Hiramatsu (Google)
  2022-09-08  1:34 ` [PATCH v2 2/2] x86/kprobes: Fix optprobe optimization check with CONFIG_RETHUNK Masami Hiramatsu (Google)
  0 siblings, 2 replies; 20+ messages in thread
From: Masami Hiramatsu (Google) @ 2022-09-08  1:34 UTC (permalink / raw)
  To: Steven Rostedt, Peter Zijlstra
  Cc: Masami Hiramatsu, Ingo Molnar, Suleiman Souhlal, bpf,
	linux-kernel, Borislav Petkov, Josh Poimboeuf, x86

Hi,

Here is the 2nd version of the patches to fix kprobes and optprobe with
CONFIG_RETHUNK and CONFIG_SLS.
Previous version is here;

https://lore.kernel.org/all/166251211081.632004.1842371136165709807.stgit@devnote2/

In this version, I updated the Fixed tag and the decoding function to
memorize all branch targets and decode those code blocks besed on 
Peter's idea. (Thanks!)

With these configs, the kernel functions may includes INT3 for stopping
speculative execution in the function code block (body) in addition to
the gaps between functions.

Since kprobes on x86 has to ensure the probe address is an instruction
bondary, it decodes the instructions in the function until the address.
If it finds an INT3 which is not embedded by kprobe, it stops decoding
because usually the INT3 is used for debugging as a software breakpoint
and such INT3 will replace the first byte of an original instruction.
Without recovering it, kprobes can not continue to decode it. Thus the
kprobes returns -EILSEQ as below.


 # echo "p:probe/vfs_truncate_L19 vfs_truncate+98" >> kprobe_events 
 sh: write error: Invalid or incomplete multibyte or wide character


Actually, those INT3s are just for padding and can be ignored.

To avoid this issue, memorize the branch target address during decoding
and if there is INT3, restart decoding from unchecked target address
so that this decodes all instructions in the kernel (in both kprobes
and optprobe.)

With thses fixes, kprobe and optprobe can probe the kernel again with
CONFIG_RETHUNK=y.


 # echo "p:probe/vfs_truncate_L19 vfs_truncate+98" >> kprobe_events 
 # echo 1 > events/probe/vfs_truncate_L19/enable 
 # cat /sys/kernel/debug/kprobes/list 
 ffffffff81307b52  k  vfs_truncate+0x62    [OPTIMIZED]


Thank you,

---

Masami Hiramatsu (Google) (2):
      x86/kprobes: Fix kprobes instruction boudary check with CONFIG_RETHUNK
      x86/kprobes: Fix optprobe optimization check with CONFIG_RETHUNK


 arch/x86/kernel/kprobes/common.h |   28 +++++
 arch/x86/kernel/kprobes/core.c   |  227 +++++++++++++++++++++++++++++++++-----
 arch/x86/kernel/kprobes/opt.c    |   96 ++++------------
 3 files changed, 249 insertions(+), 102 deletions(-)

--
Masami Hiramatsu (Google) <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2022-12-18 14:29 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-08  1:34 [PATCH v2 0/2] x86/kprobes: Fixes for CONFIG_RETHUNK Masami Hiramatsu (Google)
2022-09-08  1:34 ` [PATCH v2 1/2] x86/kprobes: Fix kprobes instruction boudary check with CONFIG_RETHUNK Masami Hiramatsu (Google)
2022-09-08  5:08   ` Josh Poimboeuf
2022-09-08  9:30     ` Peter Zijlstra
2022-09-08 10:04       ` [PATCH] x86,retpoline: Be sure to emit INT3 after JMP *%\reg Peter Zijlstra
2022-09-08 14:01         ` Alexei Starovoitov
2022-09-09  8:16           ` Peter Zijlstra
2022-09-09 14:19             ` Alexei Starovoitov
2022-09-09 16:48             ` Josh Poimboeuf
2022-09-11 15:14               ` Peter Zijlstra
2022-09-15 14:24         ` [tip: x86/core] " tip-bot2 for Peter Zijlstra
2022-09-08 10:08       ` [PATCH v2 1/2] x86/kprobes: Fix kprobes instruction boudary check with CONFIG_RETHUNK Peter Zijlstra
2022-09-08 13:03     ` Masami Hiramatsu
2022-09-08 15:01       ` [PATCH v3 0/2] x86/kprobes: Fixes for CONFIG_RETHUNK Masami Hiramatsu (Google)
2022-09-08 15:01         ` [PATCH v3 1/2] x86/kprobes: Fix kprobes instruction boudary check with CONFIG_RETHUNK Masami Hiramatsu (Google)
2022-09-08 15:01         ` [PATCH v3 2/2] x86/kprobes: Fix optprobe optimization " Masami Hiramatsu (Google)
2022-12-15  3:31           ` Nadav Amit
2022-12-18 14:28             ` Masami Hiramatsu
2022-09-08 19:31         ` [PATCH v3 0/2] x86/kprobes: Fixes for CONFIG_RETHUNK Josh Poimboeuf
2022-09-08  1:34 ` [PATCH v2 2/2] x86/kprobes: Fix optprobe optimization check with CONFIG_RETHUNK Masami Hiramatsu (Google)

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.