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(-)
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
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 >
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 > >
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
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
© 2016 - 2026 Red Hat, Inc.