[PATCH 0/4] perf: Fix leaked events when sigtrap = 1

Frederic Weisbecker posted 4 patches 1 year, 10 months ago
include/linux/perf_event.h |  1 +
include/linux/task_work.h  |  3 ++-
kernel/events/core.c       | 40 +++++++++++++++++++++++++++++++-------
kernel/irq/manage.c        |  2 +-
kernel/task_work.c         | 34 +++++++++++++++++++++++++++-----
security/keys/keyctl.c     |  2 +-
6 files changed, 67 insertions(+), 15 deletions(-)
[PATCH 0/4] perf: Fix leaked events when sigtrap = 1
Posted by Frederic Weisbecker 1 year, 10 months ago
While looking at task_work users I just noticed that perf doesn't flush
its own upon event exiting. This looks especially problematic with child
events. Please have a thourough look at the last patch, I may easily
have missed something within the maze.

Frederic Weisbecker (4):
  task_work: s/task_work_cancel()/task_work_cancel_func()/
  task_work: Introduce task_work_cancel() again
  perf: Fix event leak upon exit
  perf: Fix event leak upon exec and file release

 include/linux/perf_event.h |  1 +
 include/linux/task_work.h  |  3 ++-
 kernel/events/core.c       | 40 +++++++++++++++++++++++++++++++-------
 kernel/irq/manage.c        |  2 +-
 kernel/task_work.c         | 34 +++++++++++++++++++++++++++-----
 security/keys/keyctl.c     |  2 +-
 6 files changed, 67 insertions(+), 15 deletions(-)

-- 
2.44.0
Re: [PATCH 0/4] perf: Fix leaked events when sigtrap = 1
Posted by Ian Rogers 1 year, 10 months ago
On Fri, Mar 29, 2024 at 4:58 PM Frederic Weisbecker <frederic@kernel.org> wrote:
>
> While looking at task_work users I just noticed that perf doesn't flush
> its own upon event exiting. This looks especially problematic with child
> events. Please have a thourough look at the last patch, I may easily
> have missed something within the maze.
>
> Frederic Weisbecker (4):
>   task_work: s/task_work_cancel()/task_work_cancel_func()/
>   task_work: Introduce task_work_cancel() again
>   perf: Fix event leak upon exit
>   perf: Fix event leak upon exec and file release
>
>  include/linux/perf_event.h |  1 +
>  include/linux/task_work.h  |  3 ++-
>  kernel/events/core.c       | 40 +++++++++++++++++++++++++++++++-------
>  kernel/irq/manage.c        |  2 +-
>  kernel/task_work.c         | 34 +++++++++++++++++++++++++++-----
>  security/keys/keyctl.c     |  2 +-
>  6 files changed, 67 insertions(+), 15 deletions(-)

Thanks for this! I wonder if this relates to fuzzing failures like:
https://lore.kernel.org/linux-perf-users/CAP-5=fUa+-Tj2b_hxk96Qg5=Qu7jYHgHREbsmBa2ZmuF-X9QaA@mail.gmail.com/
"[ 2519.138665] unexpected event refcount: 2; ptr=000000009c56b097"

Thanks,
Ian

> --
> 2.44.0
>
Re: [PATCH 0/4] perf: Fix leaked events when sigtrap = 1
Posted by Frederic Weisbecker 1 year, 10 months ago
Le Fri, Mar 29, 2024 at 08:23:49PM -0700, Ian Rogers a écrit :
> On Fri, Mar 29, 2024 at 4:58 PM Frederic Weisbecker <frederic@kernel.org> wrote:
> >
> > While looking at task_work users I just noticed that perf doesn't flush
> > its own upon event exiting. This looks especially problematic with child
> > events. Please have a thourough look at the last patch, I may easily
> > have missed something within the maze.
> >
> > Frederic Weisbecker (4):
> >   task_work: s/task_work_cancel()/task_work_cancel_func()/
> >   task_work: Introduce task_work_cancel() again
> >   perf: Fix event leak upon exit
> >   perf: Fix event leak upon exec and file release
> >
> >  include/linux/perf_event.h |  1 +
> >  include/linux/task_work.h  |  3 ++-
> >  kernel/events/core.c       | 40 +++++++++++++++++++++++++++++++-------
> >  kernel/irq/manage.c        |  2 +-
> >  kernel/task_work.c         | 34 +++++++++++++++++++++++++++-----
> >  security/keys/keyctl.c     |  2 +-
> >  6 files changed, 67 insertions(+), 15 deletions(-)
> 
> Thanks for this! I wonder if this relates to fuzzing failures like:
> https://lore.kernel.org/linux-perf-users/CAP-5=fUa+-Tj2b_hxk96Qg5=Qu7jYHgHREbsmBa2ZmuF-X9QaA@mail.gmail.com/
> "[ 2519.138665] unexpected event refcount: 2; ptr=000000009c56b097"

Probably not since those seem to happen on perf_event_open() failures. This
looks different.

Thanks.


> 
> Thanks,
> Ian
> 
> > --
> > 2.44.0
> >
Re: [PATCH 0/4] perf: Fix leaked events when sigtrap = 1
Posted by Arnaldo Carvalho de Melo 1 year, 10 months ago
On Mon, Apr 08, 2024 at 09:43:41PM +0200, Frederic Weisbecker wrote:
> Le Fri, Mar 29, 2024 at 08:23:49PM -0700, Ian Rogers a écrit :
> > On Fri, Mar 29, 2024 at 4:58 PM Frederic Weisbecker <frederic@kernel.org> wrote:
> > >
> > > While looking at task_work users I just noticed that perf doesn't flush
> > > its own upon event exiting. This looks especially problematic with child
> > > events. Please have a thourough look at the last patch, I may easily
> > > have missed something within the maze.
> > >
> > > Frederic Weisbecker (4):
> > >   task_work: s/task_work_cancel()/task_work_cancel_func()/
> > >   task_work: Introduce task_work_cancel() again
> > >   perf: Fix event leak upon exit
> > >   perf: Fix event leak upon exec and file release
> > >
> > >  include/linux/perf_event.h |  1 +
> > >  include/linux/task_work.h  |  3 ++-
> > >  kernel/events/core.c       | 40 +++++++++++++++++++++++++++++++-------
> > >  kernel/irq/manage.c        |  2 +-
> > >  kernel/task_work.c         | 34 +++++++++++++++++++++++++++-----
> > >  security/keys/keyctl.c     |  2 +-
> > >  6 files changed, 67 insertions(+), 15 deletions(-)
> > 
> > Thanks for this! I wonder if this relates to fuzzing failures like:
> > https://lore.kernel.org/linux-perf-users/CAP-5=fUa+-Tj2b_hxk96Qg5=Qu7jYHgHREbsmBa2ZmuF-X9QaA@mail.gmail.com/
> > "[ 2519.138665] unexpected event refcount: 2; ptr=000000009c56b097"
> 
> Probably not since those seem to happen on perf_event_open() failures. This
> looks different.

Probably clashes with this one?

"[PATCH v3 0/4] perf: Make SIGTRAP and __perf_pending_irq() work on RT."

https://lore.kernel.org/all/20240322065208.60456-1-bigeasy@linutronix.de/T/#u

- Arnaldo
Re: [PATCH 0/4] perf: Fix leaked events when sigtrap = 1
Posted by Frederic Weisbecker 1 year, 10 months ago
Le Mon, Apr 08, 2024 at 05:20:27PM -0300, Arnaldo Carvalho de Melo a écrit :
> On Mon, Apr 08, 2024 at 09:43:41PM +0200, Frederic Weisbecker wrote:
> > Le Fri, Mar 29, 2024 at 08:23:49PM -0700, Ian Rogers a écrit :
> > > On Fri, Mar 29, 2024 at 4:58 PM Frederic Weisbecker <frederic@kernel.org> wrote:
> > > >
> > > > While looking at task_work users I just noticed that perf doesn't flush
> > > > its own upon event exiting. This looks especially problematic with child
> > > > events. Please have a thourough look at the last patch, I may easily
> > > > have missed something within the maze.
> > > >
> > > > Frederic Weisbecker (4):
> > > >   task_work: s/task_work_cancel()/task_work_cancel_func()/
> > > >   task_work: Introduce task_work_cancel() again
> > > >   perf: Fix event leak upon exit
> > > >   perf: Fix event leak upon exec and file release
> > > >
> > > >  include/linux/perf_event.h |  1 +
> > > >  include/linux/task_work.h  |  3 ++-
> > > >  kernel/events/core.c       | 40 +++++++++++++++++++++++++++++++-------
> > > >  kernel/irq/manage.c        |  2 +-
> > > >  kernel/task_work.c         | 34 +++++++++++++++++++++++++++-----
> > > >  security/keys/keyctl.c     |  2 +-
> > > >  6 files changed, 67 insertions(+), 15 deletions(-)
> > > 
> > > Thanks for this! I wonder if this relates to fuzzing failures like:
> > > https://lore.kernel.org/linux-perf-users/CAP-5=fUa+-Tj2b_hxk96Qg5=Qu7jYHgHREbsmBa2ZmuF-X9QaA@mail.gmail.com/
> > > "[ 2519.138665] unexpected event refcount: 2; ptr=000000009c56b097"
> > 
> > Probably not since those seem to happen on perf_event_open() failures. This
> > looks different.
> 
> Probably clashes with this one?
> 
> "[PATCH v3 0/4] perf: Make SIGTRAP and __perf_pending_irq() work on RT."
> 
> https://lore.kernel.org/all/20240322065208.60456-1-bigeasy@linutronix.de/T/#u

Nice, I think it partially fixes the issues I've seen. Lemme review that.

Thanks.

> 
> - Arnaldo