All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/6] tracing/probes: uaccess: Add support user-space access
@ 2019-02-28 16:02 Masami Hiramatsu
  2019-02-28 16:02 ` [PATCH v5 1/6] uaccess: Add user_access_ok() Masami Hiramatsu
                   ` (5 more replies)
  0 siblings, 6 replies; 42+ messages in thread
From: Masami Hiramatsu @ 2019-02-28 16:02 UTC (permalink / raw)
  To: Steven Rostedt, Linus Torvalds, Shuah Khan
  Cc: mhiramat, linux-kernel, Andy Lutomirski, Ingo Molnar,
	Andrew Morton, Changbin Du, Jann Horn, Kees Cook,
	Andy Lutomirski, Alexei Starovoitov, Nadav Amit, Peter Zijlstra,
	Joel Fernandes, yhs

Hi,

Here is the v5 series of probe-event to support user-space access.
This version I simplified probe_user_read (Thanks PeterZ!) and move
open-coded non-pagefault strnlen_user code to mm/maccess.c.

Changes in v5:
- [3/6]: Simplify probe_user_read() and add strnlen_unsafe_user()
- [4/6]: Use strnlen_unsafe_user()

V4 series is here;

https://lkml.kernel.org/r/155135700242.438.12930250099644500209.stgit@devbox

====
Kprobe event user-space memory access features:

For user-space access extension, this series adds 2 features,
"ustring" type and user-space dereference syntax. "ustring" is
used for recording a null-terminated string in user-space from
kprobe events.

"ustring" type is easy, it is able to use instead of "string"
type, so if you want to record a user-space string via
"__user char *", you can use ustring type instead of string.
For example,

echo 'p do_sys_open path=+0($arg2):ustring' >> kprobe_events

will record the path string from user-space.

The user-space dereference syntax is also simple. Thi just
adds 'u' prefix before an offset value.

   +|-u<OFFSET>(<FETCHARG>)

e.g. +u8(%ax), +u0(+0(%si))

This is more generic. If you want to refer the variable in user-
space from its address or access a field in data structure in
user-space, you need to use this.

For example, if you probe do_sched_setscheduler(pid, policy,
param) and record param->sched_priority, you can add new
probe as below;
    
   p do_sched_setscheduler priority=+u0($arg3)

Actually, with this feature, "ustring" type is not absolutely
necessary, because these are same meanings.

  +0($arg2):ustring == +u0($arg2):string

Note that kprobe event provides these methods, but it doesn't
change it from kernel to user automatically because we do not
know whether the given address is in userspace or kernel on
some arch.

For perf-probe, we can add some attribute for each argument
which indicate that the variable in user space. If gcc/clang
supports debuginfo for __user (address_space attribute),
perf-probe can support it and automatically choose the
correct dereference method. 

Thank you,

---

Masami Hiramatsu (5):
      uaccess: Use user_access_ok() in user_access_begin()
      uaccess: Add non-pagefault user-space read functions
      tracing/probe: Add ustring type for user-space string
      tracing/probe: Support user-space dereference
      selftests/ftrace: Add user-memory access syntax testcase

Peter Zijlstra (1):
      uaccess: Add user_access_ok()


 Documentation/trace/kprobetrace.rst                |   28 ++++-
 Documentation/trace/uprobetracer.rst               |    9 +
 arch/x86/include/asm/uaccess.h                     |   10 +-
 include/linux/uaccess.h                            |   34 +++++-
 kernel/trace/trace.c                               |    7 +
 kernel/trace/trace_kprobe.c                        |   35 ++++++
 kernel/trace/trace_probe.c                         |   36 +++++-
 kernel/trace/trace_probe.h                         |    3 
 kernel/trace/trace_probe_tmpl.h                    |   37 +++++-
 kernel/trace/trace_uprobe.c                        |   19 +++
 mm/maccess.c                                       |  122 +++++++++++++++++++-
 .../ftrace/test.d/kprobe/kprobe_args_user.tc       |   31 +++++
 12 files changed, 338 insertions(+), 33 deletions(-)
 create mode 100644 tools/testing/selftests/ftrace/test.d/kprobe/kprobe_args_user.tc

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

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

end of thread, other threads:[~2019-03-05 15:18 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-28 16:02 [PATCH v5 0/6] tracing/probes: uaccess: Add support user-space access Masami Hiramatsu
2019-02-28 16:02 ` [PATCH v5 1/6] uaccess: Add user_access_ok() Masami Hiramatsu
2019-02-28 16:03 ` [PATCH v5 2/6] uaccess: Use user_access_ok() in user_access_begin() Masami Hiramatsu
2019-03-03 17:39   ` [uaccess] 780464aed0: WARNING:at_arch/x86/include/asm/uaccess.h:#strnlen_user/0x kernel test robot
2019-03-03 17:39     ` kernel test robot
2019-03-03 19:53     ` Linus Torvalds
2019-03-03 19:53       ` Linus Torvalds
2019-03-04  1:14       ` Masami Hiramatsu
2019-03-04  1:14         ` Masami Hiramatsu
2019-03-04  2:37         ` Linus Torvalds
2019-03-04  2:37           ` Linus Torvalds
2019-03-04  9:06           ` Masami Hiramatsu
2019-03-04  9:06             ` Masami Hiramatsu
2019-03-04 15:16             ` Masami Hiramatsu
2019-03-04 15:16               ` Masami Hiramatsu
2019-03-04 15:58               ` Jann Horn
2019-03-04 15:58                 ` Jann Horn
2019-03-04 18:59             ` Linus Torvalds
2019-03-04 18:59               ` Linus Torvalds
2019-03-05  2:36               ` Masami Hiramatsu
2019-03-05  2:36                 ` Masami Hiramatsu
2019-03-05  8:22                 ` Masami Hiramatsu
2019-03-05  8:22                   ` Masami Hiramatsu
2019-03-05  9:01                   ` Masami Hiramatsu
2019-03-05  9:01                     ` Masami Hiramatsu
2019-03-05  9:07                 ` Peter Zijlstra
2019-03-05  9:07                   ` Peter Zijlstra
2019-03-05 13:58                   ` Masami Hiramatsu
2019-03-05 13:58                     ` Masami Hiramatsu
2019-03-05 14:53                     ` Peter Zijlstra
2019-03-05 14:53                       ` Peter Zijlstra
2019-03-05 15:18                       ` Masami Hiramatsu
2019-03-05 15:18                         ` Masami Hiramatsu
2019-03-04  3:20       ` [LKP] " Rong Chen
2019-03-04  3:20         ` Rong Chen
2019-02-28 16:03 ` [PATCH v5 3/6] uaccess: Add non-pagefault user-space read functions Masami Hiramatsu
2019-02-28 22:49   ` Yonghong Song
2019-03-01  2:29     ` Masami Hiramatsu
2019-03-01  6:30       ` Yonghong Song
2019-02-28 16:04 ` [PATCH v5 4/6] tracing/probe: Add ustring type for user-space string Masami Hiramatsu
2019-02-28 16:04 ` [PATCH v5 5/6] tracing/probe: Support user-space dereference Masami Hiramatsu
2019-02-28 16:05 ` [PATCH v5 6/6] selftests/ftrace: Add user-memory access syntax testcase Masami Hiramatsu

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.