linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: dave.long@linaro.org (David Long)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v6 0/6] arm64: Add kernel probes (kprobes) support
Date: Wed, 13 May 2015 15:58:42 -0400	[thread overview]
Message-ID: <5553ACF2.2080802@linaro.org> (raw)
In-Reply-To: <555370B9.2070203@redhat.com>

On 05/13/15 11:41, William Cohen wrote:
> On 05/13/2015 05:22 AM, Masami Hiramatsu wrote:
>> On 2015/05/12 21:48, William Cohen wrote:
>
>>> Hi Dave,
>>>
>>> In some of the previous diagnostic output it looked like things would go wrong
>>> in the entry.S when the D bit was cleared and the debug interrupts were
>>> unmasksed.  I wonder if some of the issue might be due to the starting the
>>> kprobe for the trampoline, but leaving things in an odd state when another
>>> set of krpobe/kretporbes are hit when the trampoline is running.
>>
>> Hmm, does this mean we have a trouble if a user kprobe handler calls the
>> function which is probed by other kprobe? Or, is this just a problem
>> only for kretprobes?
>
> Hi Masami,
>
> I wrote an example based off of sample/kprobes/kprobes_sample.c to force the reentry issue for kprobes (the attached kprobe_rentry_example.c). That seemed to run fine.  I think the reason that the trampoline handler got into trouble is because of the reset_current_kprobe() before the possible call to kfree, but I haven't verified it. It seems like that should be at the end of trampoline handler just before the return.  Other architectures have similar trampoline handlers, so I am surprised that the other architectures haven't encountered this issue with kretprobes.  Maybe this is due to specific of arm64 exception handling.
>
> # modprobe kprobe_reentry_example
> [  909.617295] Planted kprobe at fffffe00000b7b34
> [  909.623873] Planted kprobe at fffffe000032d34c
> # rmmod kprobe_reentry_example
> [ 1482.647504] kprobe at fffffe00000b7b34 unregistered
> [ 1482.687506] kprobe at fffffe000032d34c unregistered
> [ 1482.692361] y = 42
> [ 1482.694361] z = 0
> # grep \ int_sqrt$ /proc/kallsyms
> fffffe000032d34c T int_sqrt
> # grep \ do_fork$ /proc/kallsyms
> fffffe00000b7b34 T do_fork
>

I actually have been doing exactly the same thing.  I was not able to 
provoke a failure in either the pre or post handler when having them 
call to another kprobe'd (dummy) function.  However it does look to me 
like it's reentering the exception handler firstly at the second 
software breakpoint and then (shortly after returning from that) with a 
single-step.   That's what you would expect but I *thought* neither of 
those cases was allowed.  It does not call either the pre or post 
handler in the dummy function.  I would expect this to be an issue for a 
kretprobe pre handler too, although I've yet to test this.

>>
>>>   As Dave
>>> mentioned the proposed trampoline patch avoids using a kprobe in the
>>> trampoline and directly calls the trampoline handler.  Attached is the
>>> current version of the patch which was able to run the systemtap testsuite.
>>>   Systemtap does exercise the kprobe/kretprobe infrastructure, but it would
>>> be good to have additional raw kprobe tests to check that kprobe reentry
>>> works as expected.
>>
>> Actually, Will's patch looks like the same thing what I did on x86,
>> as the kretprobe-booster. So I'm OK for that. But if the above problem
>> is not solved, we need to fix that, since kprobes can be used from
>> different sources.
>
> The patch should look similar to the x86 code. The x86 code was used as a model.
>
> -Will
>

  reply	other threads:[~2015-05-13 19:58 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-20 20:19 [PATCH v6 0/6] arm64: Add kernel probes (kprobes) support David Long
2015-04-20 20:19 ` [PATCH v6 1/6] arm64: Add HAVE_REGS_AND_STACK_ACCESS_API feature David Long
2015-05-20 13:39   ` Catalin Marinas
2015-05-21  3:29     ` David Long
2015-05-21 17:55       ` Catalin Marinas
2015-05-22 17:05         ` David Long
2015-04-20 20:19 ` [PATCH v6 2/6] arm64: Add more test functions to insn.c David Long
2015-04-20 20:19 ` [PATCH v6 3/6] arm64: Kprobes with single stepping support David Long
2015-05-20 16:39   ` Catalin Marinas
2015-05-21  4:44     ` David Long
2015-05-22 11:00       ` Catalin Marinas
2015-05-22 15:49         ` William Cohen
2015-05-22 16:54           ` Catalin Marinas
2015-05-22 16:57             ` David Long
2015-04-20 20:19 ` [PATCH v6 4/6] arm64: kprobes instruction simulation support David Long
2015-04-20 20:19 ` [PATCH v6 5/6] arm64: Add kernel return probes support (kretprobes) David Long
2015-04-20 20:19 ` [PATCH v6 6/6] kprobes: Add arm64 case in kprobe example module David Long
2015-04-21 11:42 ` [PATCH v6 0/6] arm64: Add kernel probes (kprobes) support Masami Hiramatsu
2015-04-21 14:07   ` William Cohen
2015-04-24 21:14   ` William Cohen
2015-04-28  2:58     ` William Cohen
2015-04-29 10:23       ` Will Deacon
2015-05-02  1:44         ` William Cohen
2015-05-05  5:14           ` David Long
2015-05-05 15:48             ` Will Deacon
2015-05-05 16:18               ` William Cohen
2015-05-05 21:02               ` William Cohen
2015-05-06  3:14                 ` William Cohen
2015-05-12  5:54               ` David Long
2015-05-12 12:48                 ` William Cohen
2015-05-13  9:22                   ` Masami Hiramatsu
2015-05-13 15:41                     ` William Cohen
2015-05-13 19:58                       ` David Long [this message]
2015-05-13 20:35                         ` William Cohen
2015-05-14  0:01                       ` Masami Hiramatsu
2015-05-14  3:48                         ` Ananth N Mavinakayanahalli
2015-04-29  4:33   ` David Long

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=5553ACF2.2080802@linaro.org \
    --to=dave.long@linaro.org \
    --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).