mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
perf: Fix use-after-free in error path
The syscall error path has a use-after-free; put_pmu_ctx() will
reference ctx, therefore we must ensure ctx is destroyed after pmu_ctx
is.
Fixes: bd27568117
("perf: Rewrite core context handling")
Reported-by: syzbot+b8e8c01c8ade4fe6e48f@syzkaller.appspotmail.com
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Chengming Zhou <zhouchengming@bytedance.com>
Link: https://lkml.kernel.org/r/Y6B3xEgkbmFUCeni@hirez.programming.kicks-ass.net
This commit is contained in:
parent
08245672cd
commit
a551844e34
1 changed files with 3 additions and 1 deletions
|
@ -12671,7 +12671,8 @@ SYSCALL_DEFINE5(perf_event_open,
|
|||
return event_fd;
|
||||
|
||||
err_context:
|
||||
/* event->pmu_ctx freed by free_event() */
|
||||
put_pmu_ctx(event->pmu_ctx);
|
||||
event->pmu_ctx = NULL; /* _free_event() */
|
||||
err_locked:
|
||||
mutex_unlock(&ctx->mutex);
|
||||
perf_unpin_context(ctx);
|
||||
|
@ -12784,6 +12785,7 @@ perf_event_create_kernel_counter(struct perf_event_attr *attr, int cpu,
|
|||
|
||||
err_pmu_ctx:
|
||||
put_pmu_ctx(pmu_ctx);
|
||||
event->pmu_ctx = NULL; /* _free_event() */
|
||||
err_unlock:
|
||||
mutex_unlock(&ctx->mutex);
|
||||
perf_unpin_context(ctx);
|
||||
|
|
Loading…
Reference in a new issue