From: oleg@redhat.com (Oleg Nesterov)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH] uprobes: copy to user-space xol page with proper cache flushing
Date: Fri, 11 Apr 2014 18:22:43 +0200 [thread overview]
Message-ID: <20140411162243.GA30386@redhat.com> (raw)
In-Reply-To: <CAA3XUr0b7W1K85f0kzvodNEpFjhK0XY8AVFTnYzAKOnvCY=JPw@mail.gmail.com>
On 04/11, Victor Kamensky wrote:
>
> On 11 April 2014 07:56, Oleg Nesterov <oleg@redhat.com> wrote:
> >
> > 1. First of all, we do not know vma.
> >
> > OK, we can down_read(mmap_sem) and do find_vma() of course.
> > This is a bit unfortunate, especially because the architectures
> > we currently support do not need this.
>
> Question, maybe silly one but I don't know the answer, why can't we just do
> look up for vma once and cache results in place like xol_area (along with
> xol_area.vaddr) and use it all the time. IOW under what circumstances
> vma for xol area can disappear change so we need constant lookup for it?
> Comment in xol_area
>
> > /*
> > * We keep the vma's vm_start rather than a pointer to the vma
> > * itself. The probed process or a naughty kernel module could make
> > * the vma go away, and we must handle that reasonably gracefully.
> > */
> > unsigned long vaddr; /* Page(s) of instruction slots */
>
> alludes to some of those conditions, but I don't quite follow.
> Should not we go after "probed process" ability to unmap xol area.
> xol area is like vdso,
But it is not like vdso. And (unlike vsyscall page) vdso can be unmapped
too (unless it is FIX_VDSO).
> mmap call should ignore
> those..
This is not that simple, this means more ugly uprobe_ hooks in mm/.
And I think we simply do not want/need this.
I didn't write the comment above, but "reasonably gracefully" should mean
"we should not allow unmap/remap/etc(xol_area) crash the kernel, the task
can crashif it does this, we do not care".
The same for vdso, except in this case the kernel can simply forget about
this area after it does setup_additional_pages().
> > 2. The problem is, it would be very nice to remove this vma, or
> > at least hide it somehow from find_vma/etc. This is the special
> > mapping we do not want to expose to user-space.
> >
> > In fact I even have the patches which remove this vma, but they
> > do not work with compat tasks unfortunately.
>
> I don't think it is right route. Xol area as well as vdso, signal page, etc
> should be visible as regular VMAs. There are other aspects of the system
> where they needed. Like core file collection - I would like to have
> xol area present in my core file if traced process crashed.
It must never crash in xol_area, or we have a kernel bug. (we do have such
a bug which I am trying to fix right now ;)
> /porc/<pid>/maps - I would like to see my memory layout through
> this interface and I would like to see xol area there because I
> can see xol area addresses by some other means.
But it is not "your memory", to some degree. I mean, it would be nice if
it was not.
This should be more like vsyscall page. And indeed, we can move this into
FIXMAP area. The only problem, 32bit task can't use this area in 64-bit
machine.
> Appeal of copy_to_user_page approach is that I don't need to know
> how to handle sync up of icache and dcache on that architecture,
Yes, sure, this is true.
> it is
> already done by someone else when they programmed basic ptrace
> breakpoint write behavior.
Yes, but (rightly or not) I still think that uprobes differs from ptrace.
Perhaps we do not have other choice though.
Oleg.
next prev parent reply other threads:[~2014-04-11 16:22 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-09 5:58 [PATCH v2] ARM: uprobes need icache flush after xol write Victor Kamensky
2014-04-09 5:58 ` Victor Kamensky
2014-04-09 18:23 ` David Long
2014-04-09 18:45 ` Oleg Nesterov
2014-04-09 19:13 ` Victor Kamensky
2014-04-09 19:19 ` Russell King - ARM Linux
2014-04-11 3:42 ` [RFC PATCH] uprobes: copy to user-space xol page with proper cache flushing David Long
2014-04-11 3:45 ` David Long
2014-04-11 4:36 ` David Miller
2014-04-11 14:26 ` Victor Kamensky
2014-04-11 14:35 ` Oleg Nesterov
2014-04-11 14:55 ` Victor Kamensky
2014-04-11 14:56 ` Oleg Nesterov
2014-04-11 15:22 ` Oleg Nesterov
2014-04-11 15:30 ` Russell King - ARM Linux
2014-04-11 17:24 ` Oleg Nesterov
2014-04-11 17:38 ` Oleg Nesterov
2014-04-11 18:00 ` David Miller
2014-04-11 18:25 ` Oleg Nesterov
2014-04-11 17:50 ` Linus Torvalds
2014-04-11 18:02 ` David Miller
2014-04-11 18:11 ` Linus Torvalds
2014-04-11 18:19 ` David Miller
2014-04-11 18:24 ` Linus Torvalds
2014-04-11 18:58 ` David Miller
2014-04-11 19:24 ` Linus Torvalds
2014-04-11 18:13 ` Victor Kamensky
2014-04-11 18:36 ` Oleg Nesterov
2014-04-14 18:59 ` Oleg Nesterov
2014-04-14 20:05 ` Victor Kamensky
2014-04-14 21:40 ` Victor Kamensky
2014-04-15 16:26 ` Oleg Nesterov
2014-04-15 15:46 ` Oleg Nesterov
2014-04-15 16:46 ` Victor Kamensky
2014-04-15 17:19 ` David Long
2014-04-15 17:38 ` David Miller
2014-04-15 17:49 ` Oleg Nesterov
2014-04-15 17:50 ` David Miller
2014-04-15 18:07 ` Oleg Nesterov
2014-04-15 18:27 ` David Miller
2014-04-15 18:46 ` Oleg Nesterov
2014-04-15 17:43 ` Oleg Nesterov
2014-04-15 17:46 ` David Miller
2014-04-15 18:03 ` Oleg Nesterov
2014-04-15 18:30 ` David Miller
2014-04-15 18:47 ` Russell King - ARM Linux
2014-04-15 18:53 ` David Miller
2014-04-15 18:50 ` David Miller
2014-04-15 19:29 ` Russell King - ARM Linux
2014-04-15 19:51 ` David Miller
2014-04-15 19:39 ` David Long
2014-04-15 19:53 ` David Miller
2014-04-16 1:42 ` Victor Kamensky
2014-04-16 2:22 ` David Miller
2014-04-16 2:24 ` David Miller
2014-04-16 3:06 ` Victor Kamensky
2014-04-16 3:17 ` David Miller
2014-04-11 17:43 ` David Miller
2014-04-11 15:32 ` Peter Zijlstra
2014-04-11 16:00 ` Russell King - ARM Linux
2014-04-11 18:39 ` Peter Zijlstra
2014-04-11 15:37 ` Victor Kamensky
2014-04-11 16:22 ` Oleg Nesterov [this message]
2014-04-11 15:42 ` Linus Torvalds
2014-04-11 13:08 ` Oleg Nesterov
2014-04-23 10:45 ` Catalin Marinas
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=20140411162243.GA30386@redhat.com \
--to=oleg@redhat.com \
--cc=linux-arm-kernel@lists.infradead.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;
as well as URLs for NNTP newsgroup(s).