From: Peter Zijlstra <peterz@infradead.org>
To: Oleg Nesterov <oleg@redhat.com>
Cc: Prashant Bhole <bhole_prashant_q7@lab.ntt.co.jp>,
Ingo Molnar <mingo@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@redhat.com>, Namhyung Kim <namhyung@kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: uprobes/perf: KASAN: use-after-free in uprobe_perf_close
Date: Thu, 22 Feb 2018 18:04:27 +0100 [thread overview]
Message-ID: <20180222170427.GQ25181@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20180222163715.GA1485@redhat.com>
On Thu, Feb 22, 2018 at 05:37:15PM +0100, Oleg Nesterov wrote:
> On 02/22, Prashant Bhole wrote:
> > After debugging, found that uprobe_perf_close() is called after task has
> > been terminated and uprobe_perf_close() tries to access task_struct of the
> > terminated process.
>
> Oh. You can't imagine how much I forgot this code ;) I will recheck, but at
> first glance you are right. We can't rely on _free_event()->put_ctx() which
> does put_task_struct() after event->destroy(), the exiting task does
> put_task_struct(current) itself and sets child_ctx->task = TASK_TOMBSTONE in
> perf_event_exit_task_context().
>
> In short, nothing protects event->hw.target. But uprobe_perf_open() should be
> safe, perf_init_event() is called when the caller has the additional reference.
>
> I am wondering if this was wrong from the very beginning or it was broken later,
> but I won't even try to check.
b2fe8ba674e8 ("uprobes/perf: Avoid uprobe_apply() whenever possible")
Seems to have added that PF_EXITING test that dereferences the target
pointer.
> And. What about other users of event->hw.target? Say, task_bp_pinned(). It doesn't
> dereference this pointer, How can we trust the result of "iter->hw.target == tsk"
> if hw.target can be freed and then re-alloced?
I _think_ that one is ok because it looks at available slots for the
task at init time, at that point the target task must exist.
> This all makes me think that we should change (fix) kernel/events/core.c...
That's going to be mighty dodgy though, holding a reference on the task
will avoid the task from dying which will avoid the events from being
destroyed which will avoid the task from dying which will... if you get
my drift :-)
And I suspect the proposed patch already suffers that problem.
pmu::destroy really should not be looking at that pointer I'm afraid.
next prev parent reply other threads:[~2018-02-22 17:04 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-22 5:08 Prashant Bhole
2018-02-22 16:37 ` Oleg Nesterov
2018-02-22 17:04 ` Peter Zijlstra [this message]
2018-02-22 17:09 ` Peter Zijlstra
2018-02-22 17:40 ` Oleg Nesterov
2018-03-06 9:49 ` Prashant Bhole
2018-04-09 7:38 ` Peter Zijlstra
2018-04-09 10:00 ` Prashant Bhole
2018-04-09 10:40 ` Oleg Nesterov
2018-04-09 11:40 ` Peter Zijlstra
2018-02-22 17:49 ` Oleg Nesterov
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=20180222170427.GQ25181@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=acme@kernel.org \
--cc=alexander.shishkin@linux.intel.com \
--cc=bhole_prashant_q7@lab.ntt.co.jp \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=oleg@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome