Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b7b4839d authored by Dave Jones's avatar Dave Jones Committed by Ingo Molnar
Browse files

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: default avatarDave Jones <davej@fedoraproject.org>
Acked-by: default avatarPeter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20140306172028.GA552@redhat.com


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent b8ad0f91
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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);