Messages in this thread | | | Date | Thu, 9 Jun 2022 11:09:15 +0530 | Subject | Re: [PATCH v2 1/4] libperf evsel: Open shouldn't leak fd on failure | From | kajoljain <> |
| |
On 6/9/22 10:53, Ian Rogers wrote: > If the perf_event_open fails the fd is opened but the fd is only freed > by closing (not by delete). Typically when an open fails you don't call > close and so this results in a memory leak. To avoid this, add a close > when open fails. > > Signed-off-by: Ian Rogers <irogers@google.com> > --- > tools/lib/perf/evsel.c | 17 ++++++++++++----- > 1 file changed, 12 insertions(+), 5 deletions(-)
Patch looks fine to me
Reviewed-By: Kajol Jain<kjain@linux.ibm.com>
> > diff --git a/tools/lib/perf/evsel.c b/tools/lib/perf/evsel.c > index c1d58673f6ef..952f3520d5c2 100644 > --- a/tools/lib/perf/evsel.c > +++ b/tools/lib/perf/evsel.c > @@ -149,23 +149,30 @@ int perf_evsel__open(struct perf_evsel *evsel, struct perf_cpu_map *cpus, > int fd, group_fd, *evsel_fd; > > evsel_fd = FD(evsel, idx, thread); > - if (evsel_fd == NULL) > - return -EINVAL; > + if (evsel_fd == NULL) { > + err = -EINVAL; > + goto out; > + } > > err = get_group_fd(evsel, idx, thread, &group_fd); > if (err < 0) > - return err; > + goto out; > > fd = sys_perf_event_open(&evsel->attr, > threads->map[thread].pid, > cpu, group_fd, 0); > > - if (fd < 0) > - return -errno; > + if (fd < 0) { > + err = -errno; > + goto out; > + } > > *evsel_fd = fd; > } > } > +out: > + if (err) > + perf_evsel__close(evsel); > > return err; > }
| |