From: Oleg Nesterov <oleg@redhat.com>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Namhyung Kim <namhyung.kim@lge.com>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
Hyeoncheol Lee <cheol.lee@lge.com>,
Hemant Kumar <hkshaw@linux.vnet.ibm.com>,
LKML <linux-kernel@vger.kernel.org>,
Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
"zhangwei(Jovi)" <jovi.zhangwei@huawei.com>,
Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Subject: Re: [PATCH 12/13] tracing/uprobes: Add more fetch functions
Date: Fri, 1 Nov 2013 18:53:34 +0100 [thread overview]
Message-ID: <20131101175334.GA27088@redhat.com> (raw)
In-Reply-To: <1383029621-7384-13-git-send-email-namhyung@kernel.org>
On 10/29, Namhyung Kim wrote:
>
> +static unsigned long get_user_stack_nth(struct pt_regs *regs, unsigned int n)
> +{
> + struct vm_area_struct *vma;
> + unsigned long addr = user_stack_pointer(regs);
> + bool valid = false;
> + unsigned long ret = 0;
> +
> + down_read(¤t->mm->mmap_sem);
> + vma = find_vma(current->mm, addr);
> + if (vma && vma->vm_start <= addr) {
> + if (within_user_stack(vma, addr, n))
> + valid = true;
> + }
> + up_read(¤t->mm->mmap_sem);
> +
> + addr = adjust_stack_addr(addr, n);
> +
> + if (valid && copy_from_user(&ret, (void __force __user *)addr,
> + sizeof(ret)) == 0)
> + return ret;
> + return 0;
> +}
Namhyung, I am just curious, why do we need find_vma/within_user_stack?
copy_from_user() should fail or expand the stack. Yes, we can actually
look into the wrong vma, but do we really care?
> +static void __user *get_user_vaddr(unsigned long addr, struct trace_uprobe *tu)
> +{
> + unsigned long pgoff = addr >> PAGE_SHIFT;
> + struct vm_area_struct *vma;
> + struct address_space *mapping;
> + unsigned long vaddr = 0;
> +
> + if (tu == NULL) {
> + /* A NULL tu means that we already got the vaddr */
> + return (void __force __user *) addr;
> + }
> +
> + mapping = tu->inode->i_mapping;
> +
> + mutex_lock(&mapping->i_mmap_mutex);
> + vma_interval_tree_foreach(vma, &mapping->i_mmap, pgoff, pgoff) {
> + if (vma->vm_mm != current->mm)
> + continue;
> + if (!(vma->vm_flags & VM_READ))
> + continue;
> +
> + vaddr = offset_to_vaddr(vma, addr);
> + break;
> + }
> + mutex_unlock(&mapping->i_mmap_mutex);
> +
> + WARN_ON_ONCE(vaddr == 0);
> + return (void __force __user *) vaddr;
So. If I understand correctly, @addr cat only read the memory mmaped
to the probed binary, and we need to translate the address... And in
general we can't read the data from bss.
Right?
I'll probably ask another question about this later...
> +static __kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
> + void *addr, void *dest, void *priv)
> +{
> + long ret;
> + u32 rloc = *(u32 *)dest;
> + int maxlen = get_rloc_len(rloc);
> + u8 *dst = get_rloc_data(dest);
> + void __user *vaddr = get_user_vaddr((unsigned long)addr, priv);
> + void __user *src = vaddr;
> +
> + if (!maxlen)
> + return;
> +
> + do {
> + ret = copy_from_user(dst, src, sizeof(*dst));
> + dst++;
> + src++;
> + } while (dst[-1] && ret == 0 && (src - vaddr) < maxlen);
Can't we use strncpy_from_user() ?
> +static __kprobes void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
> + void *addr, void *dest, void *priv)
> +{
> + int ret, len = 0;
> + u8 c;
> + void __user *vaddr = get_user_vaddr((unsigned long)addr, priv);
> +
> + do {
> + ret = __copy_from_user_inatomic(&c, vaddr + len, 1);
Hmm. I guess I need to actually apply this series ;)
Why inatomic? it seems that this is for uprobes, no? And perhaps
strnlen_user() should work just fine?
Oleg.
next prev parent reply other threads:[~2013-11-01 17:52 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-29 6:53 [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v6) Namhyung Kim
2013-10-29 6:53 ` [PATCH 01/13] tracing/uprobes: Fix documentation of uprobe registration syntax Namhyung Kim
2013-10-29 6:53 ` [PATCH 02/13] tracing/probes: Fix basic print type functions Namhyung Kim
2013-10-29 6:53 ` [PATCH 03/13] tracing/kprobes: Move fetch functions to trace_kprobe.c Namhyung Kim
2013-10-29 6:53 ` [PATCH 04/13] tracing/kprobes: Add fetch{,_size} member into deref fetch method Namhyung Kim
2013-10-29 6:53 ` [PATCH 05/13] tracing/kprobes: Staticize stack and memory fetch functions Namhyung Kim
2013-10-29 6:53 ` [PATCH 06/13] tracing/kprobes: Factor out struct trace_probe Namhyung Kim
2013-10-29 6:53 ` [PATCH 07/13] tracing/uprobes: Convert to " Namhyung Kim
2013-10-29 6:53 ` [PATCH 08/13] tracing/kprobes: Move common functions to trace_probe.h Namhyung Kim
2013-10-29 6:53 ` [PATCH 09/13] tracing/kprobes: Integrate duplicate set_print_fmt() Namhyung Kim
2013-10-29 6:53 ` [PATCH 10/13] tracing/uprobes: Fetch args before reserving a ring buffer Namhyung Kim
2013-10-31 18:16 ` Oleg Nesterov
2013-11-01 9:00 ` Namhyung Kim
2013-11-04 8:06 ` Namhyung Kim
2013-11-04 14:35 ` Oleg Nesterov
2013-11-05 1:12 ` Namhyung Kim
2013-11-01 15:09 ` Oleg Nesterov
2013-11-01 15:22 ` Oleg Nesterov
2013-11-03 20:20 ` Oleg Nesterov
2013-11-04 8:11 ` Namhyung Kim
2013-11-04 14:38 ` Oleg Nesterov
2013-11-05 1:17 ` Namhyung Kim
2013-10-29 6:53 ` [PATCH 11/13] tracing/kprobes: Add priv argument to fetch functions Namhyung Kim
2013-11-04 16:09 ` Oleg Nesterov
2013-11-05 2:10 ` Namhyung Kim
2013-10-29 6:53 ` [PATCH 12/13] tracing/uprobes: Add more " Namhyung Kim
2013-10-31 18:22 ` Oleg Nesterov
2013-11-04 8:50 ` Namhyung Kim
2013-11-04 16:44 ` Oleg Nesterov
2013-11-04 17:17 ` Steven Rostedt
2013-11-05 2:19 ` Namhyung Kim
2013-11-05 2:17 ` Namhyung Kim
2013-11-01 17:53 ` Oleg Nesterov [this message]
2013-10-29 6:53 ` [PATCH 13/13] tracing/uprobes: Add support for full argument access methods Namhyung Kim
2013-10-30 10:36 ` [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v6) Masami Hiramatsu
2013-11-02 15:54 ` Oleg Nesterov
2013-11-04 8:46 ` Namhyung Kim
2013-11-04 8:59 ` Namhyung Kim
2013-11-04 15:51 ` Oleg Nesterov
2013-11-04 16:22 ` Oleg Nesterov
2013-11-04 18:47 ` Oleg Nesterov
2013-11-04 18:57 ` Oleg Nesterov
2013-11-05 2:51 ` Namhyung Kim
2013-11-05 16:41 ` Oleg Nesterov
2013-11-06 8:37 ` Namhyung Kim
2013-11-05 2:49 ` Namhyung Kim
2013-11-05 6:58 ` Namhyung Kim
2013-11-05 17:45 ` Oleg Nesterov
2013-11-05 19:24 ` Oleg Nesterov
2013-11-06 8:57 ` Namhyung Kim
2013-11-06 17:37 ` Oleg Nesterov
2013-11-06 18:24 ` Oleg Nesterov
2013-11-07 9:00 ` Namhyung Kim
2013-11-08 17:00 ` Oleg Nesterov
2013-11-12 7:49 ` Namhyung Kim
2013-11-07 8:48 ` Namhyung Kim
2013-11-09 3:18 ` Masami Hiramatsu
2013-11-09 15:23 ` Oleg Nesterov
2013-11-12 8:00 ` Namhyung Kim
2013-11-12 18:44 ` Oleg Nesterov
2013-11-25 6:59 ` Namhyung Kim
2013-11-25 14:12 ` [PATCH] uprobes: Allocate ->utask before handler_chain() for tracing handlers Oleg Nesterov
2013-11-06 8:48 ` [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v6) Namhyung Kim
2013-11-06 16:28 ` Oleg Nesterov
2013-11-07 7:33 ` Namhyung Kim
2013-11-08 16:52 ` Oleg Nesterov
2013-11-05 2:15 ` Namhyung Kim
2013-11-05 16:33 ` Oleg Nesterov
2013-11-06 8:34 ` Namhyung Kim
2013-11-05 1:59 ` Namhyung Kim
2013-11-04 15:01 ` Oleg Nesterov
2013-11-05 1:53 ` Namhyung Kim
2013-11-05 16:28 ` Oleg Nesterov
2013-11-06 8:31 ` Namhyung Kim
-- strict thread matches above, loose matches on Subject: below --
2013-09-03 5:44 [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v5) Namhyung Kim
2013-09-03 5:44 ` [PATCH 12/13] tracing/uprobes: Add more fetch functions Namhyung Kim
2013-08-27 8:48 [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v4) Namhyung Kim
2013-08-27 8:48 ` [PATCH 12/13] tracing/uprobes: Add more fetch functions Namhyung Kim
2013-08-27 12:03 ` Masami Hiramatsu
2013-08-28 5:37 ` Namhyung Kim
2013-08-09 8:44 [PATCHSET 00/13] tracing/uprobes: Add support for more fetch methods (v3) Namhyung Kim
2013-08-09 8:45 ` [PATCH 12/13] tracing/uprobes: Add more fetch functions Namhyung Kim
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=20131101175334.GA27088@redhat.com \
--to=oleg@redhat.com \
--cc=acme@ghostprotocols.net \
--cc=cheol.lee@lge.com \
--cc=hkshaw@linux.vnet.ibm.com \
--cc=jovi.zhangwei@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=namhyung.kim@lge.com \
--cc=namhyung@kernel.org \
--cc=rostedt@goodmis.org \
--cc=srikar@linux.vnet.ibm.com \
/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;
as well as URLs for NNTP newsgroup(s).