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

Commit 449e5b24 authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Arnaldo Carvalho de Melo
Browse files

perf probe: Fix memory leaks in add_perf_probe_events



Fix several memory leaks of pkgs and tevs in add_perf_probe_events().

Reported-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: linux-kernel@vger.kernel.org
LKML-Reference: <4C577ADC.1000309@hitachi.com>

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 58432e1f
Loading
Loading
Loading
Loading
+8 −3
Original line number Original line Diff line number Diff line
@@ -1606,8 +1606,10 @@ int add_perf_probe_events(struct perf_probe_event *pevs, int npevs,


	/* Init vmlinux path */
	/* Init vmlinux path */
	ret = init_vmlinux();
	ret = init_vmlinux();
	if (ret < 0)
	if (ret < 0) {
		free(pkgs);
		return ret;
		return ret;
	}


	/* Loop 1: convert all events */
	/* Loop 1: convert all events */
	for (i = 0; i < npevs; i++) {
	for (i = 0; i < npevs; i++) {
@@ -1625,10 +1627,13 @@ int add_perf_probe_events(struct perf_probe_event *pevs, int npevs,
		ret = __add_probe_trace_events(pkgs[i].pev, pkgs[i].tevs,
		ret = __add_probe_trace_events(pkgs[i].pev, pkgs[i].tevs,
						pkgs[i].ntevs, force_add);
						pkgs[i].ntevs, force_add);
end:
end:
	/* Loop 3: cleanup trace events  */
	/* Loop 3: cleanup and free trace events  */
	for (i = 0; i < npevs; i++)
	for (i = 0; i < npevs; i++) {
		for (j = 0; j < pkgs[i].ntevs; j++)
		for (j = 0; j < pkgs[i].ntevs; j++)
			clear_probe_trace_event(&pkgs[i].tevs[j]);
			clear_probe_trace_event(&pkgs[i].tevs[j]);
		free(pkgs[i].tevs);
	}
	free(pkgs);


	return ret;
	return ret;
}
}