perf/x86: Fix leak in uncore_type_init failure paths
The error path of uncore_type_init() frees up any allocations that were made along the way, but it relies upon type->pmus being set, which only happens if the function succeeds. As type->pmus remains null in this case, the call to uncore_type_exit will do nothing. Moving the assignment earlier will allow us to actually free those allocations should something go awry. Signed-off-by: Dave Jones <davej@fedoraproject.org> Acked-by: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/20140306172028.GA552@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
Родитель
b8ad0f912b
Коммит
b7b4839d93
|
@ -3334,6 +3334,8 @@ static int __init uncore_type_init(struct intel_uncore_type *type)
|
|||
if (!pmus)
|
||||
return -ENOMEM;
|
||||
|
||||
type->pmus = pmus;
|
||||
|
||||
type->unconstrainted = (struct event_constraint)
|
||||
__EVENT_CONSTRAINT(0, (1ULL << type->num_counters) - 1,
|
||||
0, type->num_counters, 0, 0);
|
||||
|
@ -3369,7 +3371,6 @@ static int __init uncore_type_init(struct intel_uncore_type *type)
|
|||
}
|
||||
|
||||
type->pmu_group = &uncore_pmu_attr_group;
|
||||
type->pmus = pmus;
|
||||
return 0;
|
||||
fail:
|
||||
uncore_type_exit(type);
|
||||
|
|
Загрузка…
Ссылка в новой задаче