All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Andrea Righi <righi.andrea@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Ingo Molnar <mingo@redhat.com>,
	peterz@infradead.org,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 0/2] kprobes: Fix kretprobe incorrect stacking order problem
Date: Tue, 8 Jan 2019 11:56:48 +0900	[thread overview]
Message-ID: <20190108115648.5ecf625bf5477ad3f3148b80@kernel.org> (raw)
In-Reply-To: <20190107213439.GD5966@xps-13>

Hi Andrea and Steve,

On Mon, 7 Jan 2019 22:34:39 +0100
Andrea Righi <righi.andrea@gmail.com> wrote:

> On Mon, Jan 07, 2019 at 04:28:33PM -0500, Steven Rostedt wrote:
> > On Mon, 7 Jan 2019 22:19:04 +0100
> > Andrea Righi <righi.andrea@gmail.com> wrote:
> > 
> > > > > If we put a kretprobe to raw_spin_lock_irqsave() it looks like
> > > > > kretprobe is going to call kretprobe...  
> > > > 
> > > > Right, but we should be able to add some recursion protection to stop
> > > > that. I have similar protection in the ftrace code.  
> > > 
> > > If we assume that __raw_spin_lock/unlock*() are always inlined a
> > 
> > I wouldn't assume that.
> > 
> > > possible way to prevent this recursion could be to use directly those
> > > functions to do locking from the kretprobe trampoline.
> > > 
> > > But I'm not sure if that's a safe assumption... if not I'll see if I can
> > > find a better solution.
> > 
> > All you need to do is have a per_cpu variable, where you just do:
> > 
> > 	preempt_disable_notrace();
> > 	if (this_cpu_read(kprobe_recursion))
> > 		goto out;
> > 	this_cpu_inc(kprobe_recursion);
> > 	[...]
> > 	this_cpu_dec(kprobe_recursion);
> > out:
> > 	preempt_enable_notrace();
> > 
> > And then just ignore any kprobes that trigger while you are processing
> > the current kprobe.
> > 
> > Something like that. If you want (or if it already happens) replace
> > preempt_disable() with local_irq_save().
> 
> Oh.. definitely much better. I'll work on that and send a new patch.
> Thanks for the suggestion!

Thank you for pointing it out, 

Since we already have current_kprobe per_cpu, it can be done by setting up
a dummy kprobe on it. I'll add that in v2 series.

Actually, this bug has been introduced a long time ago by me... when I
introduced asm-coded kretprobe-trampoline. Before that, kretprobe trampoline
handler uses a kprobe to hook it, so the 2nd kretprobe must be skipped
automatically.

Thank you,

-- 
Masami Hiramatsu <mhiramat@kernel.org>

      reply	other threads:[~2019-01-08  2:56 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-07 13:31 [PATCH 0/2] kprobes: Fix kretprobe incorrect stacking order problem Masami Hiramatsu
2019-01-07 13:32 ` [PATCH 1/2] x86/kprobes: Verify stack frame on kretprobe Masami Hiramatsu
2019-01-07 13:32 ` [PATCH 2/2] kprobes: Mark ftrace mcount handler functions nokprobe Masami Hiramatsu
2019-01-07 14:55   ` Andrea Righi
2019-01-07 17:29     ` Steven Rostedt
2019-01-08  2:41       ` Masami Hiramatsu
2019-01-08  2:40     ` Masami Hiramatsu
2019-01-07 17:23   ` kbuild test robot
2019-01-07 17:38   ` kbuild test robot
2019-01-07 17:28 ` [PATCH 0/2] kprobes: Fix kretprobe incorrect stacking order problem Andrea Righi
2019-01-07 18:34 ` Andrea Righi
2019-01-07 19:27   ` Steven Rostedt
2019-01-07 19:52     ` Andrea Righi
2019-01-07 19:59       ` Steven Rostedt
2019-01-07 21:19         ` Andrea Righi
2019-01-07 21:28           ` Steven Rostedt
2019-01-07 21:34             ` Andrea Righi
2019-01-08  2:56               ` Masami Hiramatsu [this message]

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=20190108115648.5ecf625bf5477ad3f3148b80@kernel.org \
    --to=mhiramat@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=righi.andrea@gmail.com \
    --cc=rostedt@goodmis.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 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.