mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>,
	Linus Torvalds <torvalds@linux-foundation.org>
Cc: mhiramat@kernel.org, linux-kernel@vger.kernel.org,
	Andy Lutomirski <luto@amacapital.net>,
	Ingo Molnar <mingo@kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Changbin Du <changbin.du@gmail.com>, Jann Horn <jannh@google.com>,
	Kees Cook <keescook@chromium.org>,
	Andy Lutomirski <luto@kernel.org>,
	Alexei Starovoitov <alexei.starovoitov@gmail.com>,
	Nadav Amit <namit@vmware.com>,
	Peter Zijlstra <peterz@infradead.org>
Subject: [PATCH v3 0/5] tracing/probes: uaccess: Add support user-space access
Date: Wed, 27 Feb 2019 23:42:15 +0900	[thread overview]
Message-ID: <155127853496.32576.3705994926675037747.stgit@devbox> (raw)

Hi,

Here is the v3 series of probe-event to support user-space access.
In this version I removed unneeded kernel_uaccess_faults_ok patch,
included PeterZ's user_access_ok(), and simplifies non-pagefault
user-space read functions according to the discussion on the
previous sereis.

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

- [1/5]: New: introduce user_access_ok
- [2/5]: New: user user_access_ok() in user_access_begin()
- [3/5]: Simplify implementation using strncpy_from_user
- [4/5]: Simplify implementation using strnlen_user
- [5/5]: Update documentation

PeterZ, I imported your patch in this series, and add a short
description. If there is any misundrestanding, please tell me.

====
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. But still
we can not decide it automatically by DWARF since __user attribute
is not transrated to DWARF attribute.

Thank you,

---

Masami Hiramatsu (4):
      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

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


 Documentation/trace/kprobetrace.rst  |   26 ++++++++-
 Documentation/trace/uprobetracer.rst |    9 ++-
 arch/x86/include/asm/uaccess.h       |   10 +++-
 include/linux/uaccess.h              |   33 ++++++++++++
 kernel/trace/trace.c                 |    7 +--
 kernel/trace/trace_kprobe.c          |   43 ++++++++++++++++
 kernel/trace/trace_probe.c           |   39 +++++++++++---
 kernel/trace/trace_probe.h           |    3 +
 kernel/trace/trace_probe_tmpl.h      |   37 +++++++++++--
 kernel/trace/trace_uprobe.c          |   19 +++++++
 mm/maccess.c                         |   94 ++++++++++++++++++++++++++++++++--
 11 files changed, 287 insertions(+), 33 deletions(-)

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

             reply	other threads:[~2019-02-27 14:42 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-27 14:42 Masami Hiramatsu [this message]
2019-02-27 14:42 ` [PATCH v3 1/5] uaccess: Add user_access_ok() Masami Hiramatsu
2019-02-27 14:43 ` [PATCH v3 2/5] uaccess: Use user_access_ok() in user_access_begin() Masami Hiramatsu
2019-02-27 14:43 ` [PATCH v3 3/5] uaccess: Add non-pagefault user-space read functions Masami Hiramatsu
2019-02-27 14:44 ` [PATCH v3 4/5] tracing/probe: Add ustring type for user-space string Masami Hiramatsu
2019-02-28  2:20   ` Steven Rostedt
2019-02-27 14:44 ` [PATCH v3 5/5] tracing/probe: Support user-space dereference Masami Hiramatsu
2019-02-28  2:31   ` Steven Rostedt
2019-02-28  7:00     ` Masami Hiramatsu
2019-02-28 16:20       ` Steven Rostedt
2019-02-28  2:42   ` Steven Rostedt
2019-02-28  6:08     ` Masami Hiramatsu
2019-02-27 22:32 ` [PATCH v3 0/5] tracing/probes: uaccess: Add support user-space access Alexei Starovoitov
2019-02-28  1:54   ` Masami Hiramatsu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=155127853496.32576.3705994926675037747.stgit@devbox \
    --to=mhiramat@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=alexei.starovoitov@gmail.com \
    --cc=changbin.du@gmail.com \
    --cc=jannh@google.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=luto@kernel.org \
    --cc=mingo@kernel.org \
    --cc=namit@vmware.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome