mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-08 06:06:40 +07:00
perf/x86/intel: Fix memory leak on hot-plug allocation fail
We fail to free the shared_regs allocation if the constraint_list allocation fails. Cure this and be more consistent in NULL-ing the pointers after free. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
c7999c6f3f
commit
dbc72b7a0c
@ -2534,7 +2534,7 @@ static int intel_pmu_cpu_prepare(int cpu)
|
||||
if (x86_pmu.extra_regs || x86_pmu.lbr_sel_map) {
|
||||
cpuc->shared_regs = allocate_shared_regs(cpu);
|
||||
if (!cpuc->shared_regs)
|
||||
return NOTIFY_BAD;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (x86_pmu.flags & PMU_FL_EXCL_CNTRS) {
|
||||
@ -2542,18 +2542,27 @@ static int intel_pmu_cpu_prepare(int cpu)
|
||||
|
||||
cpuc->constraint_list = kzalloc(sz, GFP_KERNEL);
|
||||
if (!cpuc->constraint_list)
|
||||
return NOTIFY_BAD;
|
||||
goto err_shared_regs;
|
||||
|
||||
cpuc->excl_cntrs = allocate_excl_cntrs(cpu);
|
||||
if (!cpuc->excl_cntrs) {
|
||||
kfree(cpuc->constraint_list);
|
||||
kfree(cpuc->shared_regs);
|
||||
return NOTIFY_BAD;
|
||||
}
|
||||
if (!cpuc->excl_cntrs)
|
||||
goto err_constraint_list;
|
||||
|
||||
cpuc->excl_thread_id = 0;
|
||||
}
|
||||
|
||||
return NOTIFY_OK;
|
||||
|
||||
err_constraint_list:
|
||||
kfree(cpuc->constraint_list);
|
||||
cpuc->constraint_list = NULL;
|
||||
|
||||
err_shared_regs:
|
||||
kfree(cpuc->shared_regs);
|
||||
cpuc->shared_regs = NULL;
|
||||
|
||||
err:
|
||||
return NOTIFY_BAD;
|
||||
}
|
||||
|
||||
static void intel_pmu_cpu_starting(int cpu)
|
||||
|
Loading…
Reference in New Issue
Block a user