[PATCH 1/2] perf kvm: Fix memory leak in process_sample_event()
Michalis Niarchos <[email protected]>
| Newsgroups | org.kernel.feeds.b4-sent,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users |
|---|---|
| Message-ID | <[email protected]> |
machine__resolve() indirectly acquires a thread reference via machine__findnew_thread(). Release it, as suggested by the documentation of the former. Signed-off-by: Michalis Niarchos <[email protected]> --- tools/perf/builtin-kvm.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tools/perf/builtin-kvm.c b/tools/perf/builtin-kvm.c index 00baafb05603..8e7bc7b2db18 100644 --- a/tools/perf/builtin-kvm.c +++ b/tools/perf/builtin-kvm.c @@ -1145,7 +1145,7 @@ static int process_sample_event(const struct perf_tool *tool, if (machine__resolve(machine, &kvm->al, sample) < 0) { pr_warning("WARNING: at offset %#" PRIx64 ": fail to resolve address location, skipping sample\n", sample->file_offset); - return 0; + goto out; } thread = machine__findnew_thread(machine, sample->pid, sample->tid); @@ -1153,13 +1153,16 @@ static int process_sample_event(const struct perf_tool *tool, pr_debug("problem processing %s (%u) event at offset %#" PRIx64 ", skipping it.\n", perf_event__name(event->header.type), event->header.type, sample->file_offset); - return -1; + err = -1; + goto out; } if (!handle_kvm_event(kvm, thread, sample)) err = -1; thread__put(thread); +out: + addr_location__exit(&kvm->al); return err; } -- 2.55.0