[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAOMGZ=FivHoLx_PnKg7rSNFq_fBTDsUZTsXhQAjx=NV5VfOGjA@mail.gmail.com>
Date: Sat, 30 Jul 2016 00:36:45 +0200
From: Vegard Nossum <vegard.nossum@...il.com>
To: Peter Zijlstra <peterz@...radead.org>
Cc: David Carrillo-Cisneros <davidcc@...gle.com>,
Vineet Gupta <Vineet.Gupta1@...opsys.com>,
Kan Liang <kan.liang@...el.com>,
Arnaldo Carvalho de Melo <acme@...hat.com>,
LKML <linux-kernel@...r.kernel.org>
Subject: Re: NULL ptr deref in perf/filter_match
On 29 July 2016 at 23:41, Vegard Nossum <vegard.nossum@...il.com> wrote:
> On 27 July 2016 at 16:15, Vegard Nossum <vegard.nossum@...il.com> wrote:
>> Hi,
>>
>> I'm seeing this on latest linus/master:
[...]
>> RIP: 0010:[<ffffffff81327820>] [<ffffffff81327820>] perf_iterate_sb+0x1b0/0x6a0
[...]
>>
>> In particular, it looks to me like event->ctx is NULL.
>
> Digging a bit deeper into this, it seems the event itself is getting
> created by perf_event_open() and it gets added to the pmu_event_list
> through:
>
> perf_event_open()
> - perf_event_alloc()
> - account_event()
> - account_pmu_sb_event()
> - attach_sb_event()
>
> so at this point the event is being attached but its ->ctx is still
> NULL. It seems like ->ctx is set just a bit later in
> perf_event_open(), though.
>
> But before that, __schedule() comes along and creates a stack trace
> similar to the one above:
>
> __schedule()
> - __perf_event_task_sched_out()
> - perf_iterate_sb()
> - perf_iterate_sb_cpu()
> - event_filter_match()
> - perf_cgroup_match()
> - __get_cpu_context()
> - (dereference ctx which is NULL)
>
> So I guess the question is... should the event be attached (= put on
> the list) before ->ctx gets set? Or should the cgroup code check for a
> NULL ->ctx?
>
> I'm seeing the NUL ptr deref in __perf_event_task_sched_in() as well, btw.
>
> I'm thinking this is probably where the bug was introduced:
>
> commit f2fb6bef92514432398a653df1c2f1041d79ac46
> Author: Kan Liang <kan.liang@...el.com>
> Date: Wed Mar 23 11:24:37 2016 -0700
>
> perf/core: Optimize side-band event delivery
Reverting aab5b71ef2b5c62323b9abe397e2db57b18e1f78 and
f2fb6bef92514432398a653df1c2f1041d79ac46 does indeed fix the issue for
me.
(Just to be clear, I'm not suggesting a revert as the final fix to
this issue, but it shows quite clearly where the problem is.)
Vegard
View attachment "0001-Revert-perf-core-Rename-the-perf_event_aux-APIs-to-p.patch" of type "text/x-patch" (8846 bytes)
Powered by blists - more mailing lists