--- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -12690,6 +12690,8 @@ SYSCALL_DEFINE5(perf_event_open, err_context: /* event->pmu_ctx freed by free_event() */ + put_pmu_ctx(event->pmu_ctx); + event->pmu_ctx = NULL; err_locked: mutex_unlock(&ctx->mutex); perf_unpin_context(ctx); @@ -12802,6 +12804,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; err_unlock: mutex_unlock(&ctx->mutex); perf_unpin_context(ctx);