All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Kajol Jain <kjain@linux.ibm.com>,
	Athira Rajeev <atrajeev@linux.vnet.ibm.com>,
	"Steinar H. Gunderson" <sesse@google.com>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	"David S. Miller" <davem@davemloft.net>,
	Przemek Kitszel <przemyslaw.kitszel@intel.com>,
	Alexander Lobakin <aleksander.lobakin@intel.com>,
	Hemant Kumar <hemant@linux.vnet.ibm.com>,
	linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
	Yang Jihong <yangjihong@bytedance.com>,
	leo.yan@arm.com
Subject: Re: [PATCH v1 1/3] perf disasm: Fix capstone memory leak
Date: Tue, 24 Sep 2024 22:57:48 -0700	[thread overview]
Message-ID: <ZvOmXH7gKzGKSh7y@google.com> (raw)
In-Reply-To: <CAP-5=fUCbzz=bLY75DKfdPRNjW91yz6yAzywVe_QWDwK4d7R8g@mail.gmail.com>

On Tue, Sep 24, 2024 at 12:51:20PM -0700, Ian Rogers wrote:
> On Tue, Sep 24, 2024 at 11:38 AM Namhyung Kim <namhyung@kernel.org> wrote:
> >
> > On Mon, Sep 23, 2024 at 05:37:18PM -0700, Ian Rogers wrote:
> > > The insn argument passed to cs_disasm needs freeing. To support
> > > accurately having count, add an additional free_count variable.
> > >
> > > Fixes: c5d60de1813a ("perf annotate: Add support to use libcapstone in powerpc")
> > > Signed-off-by: Ian Rogers <irogers@google.com>
> > > ---
> > >  tools/perf/util/disasm.c | 11 +++++++----
> > >  1 file changed, 7 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/tools/perf/util/disasm.c b/tools/perf/util/disasm.c
> > > index f05ba7739c1e..2c8063660f2e 100644
> > > --- a/tools/perf/util/disasm.c
> > > +++ b/tools/perf/util/disasm.c
> > > @@ -1627,12 +1627,12 @@ static int symbol__disassemble_capstone(char *filename, struct symbol *sym,
> > >       u64 start = map__rip_2objdump(map, sym->start);
> > >       u64 len;
> > >       u64 offset;
> > > -     int i, count;
> > > +     int i, count, free_count;
> > >       bool is_64bit = false;
> > >       bool needs_cs_close = false;
> > >       u8 *buf = NULL;
> > >       csh handle;
> > > -     cs_insn *insn;
> > > +     cs_insn *insn = NULL;
> > >       char disasm_buf[512];
> > >       struct disasm_line *dl;
> > >
> > > @@ -1664,7 +1664,7 @@ static int symbol__disassemble_capstone(char *filename, struct symbol *sym,
> > >
> > >       needs_cs_close = true;
> > >
> > > -     count = cs_disasm(handle, buf, len, start, len, &insn);
> > > +     free_count = count = cs_disasm(handle, buf, len, start, len, &insn);
> > >       for (i = 0, offset = 0; i < count; i++) {
> > >               int printed;
> > >
> > > @@ -1702,8 +1702,11 @@ static int symbol__disassemble_capstone(char *filename, struct symbol *sym,
> > >       }
> > >
> > >  out:
> > > -     if (needs_cs_close)
> > > +     if (needs_cs_close) {
> > >               cs_close(&handle);
> > > +             if (free_count > 0)
> > > +                     cs_free(insn, free_count);
> >
> > It seems cs_free() can handle NULL insn and 0 free_count (like regular free)
> > so we can call it unconditionally.
> 
> No, on error from cs_disasm free_count gets assigned -1 and my
> experience was things crashing.
 
Ok then, I thought it returns 0 on error.

Thanks,
Namhyung

> >
> > > +     }
> > >       free(buf);
> > >       return count < 0 ? count : 0;
> > >
> > > --
> > > 2.46.0.792.g87dc391469-goog
> > >

  reply	other threads:[~2024-09-25  5:57 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-24  0:37 [PATCH v1 0/3] 2 memory fixes and a build fix Ian Rogers
2024-09-24  0:37 ` [PATCH v1 1/3] perf disasm: Fix capstone memory leak Ian Rogers
2024-09-24 18:38   ` Namhyung Kim
2024-09-24 19:51     ` Ian Rogers
2024-09-25  5:57       ` Namhyung Kim [this message]
2024-09-24  0:37 ` [PATCH v1 2/3] perf probe: Fix libdw " Ian Rogers
2024-09-24  9:17   ` James Clark
2024-09-24 18:39     ` Namhyung Kim
2024-09-24 19:47       ` Ian Rogers
2024-09-25  6:00         ` Namhyung Kim
2024-10-02 17:43   ` Namhyung Kim
2024-10-02 19:08     ` Ian Rogers
2024-10-02 21:53       ` Namhyung Kim
2024-09-24  0:37 ` [PATCH v1 3/3] perf build: Fix !HAVE_DWARF_GETLOCATIONS_SUPPORT Ian Rogers
2024-09-24  9:18 ` [PATCH v1 0/3] 2 memory fixes and a build fix James Clark
2024-09-24 18:25 ` Namhyung Kim
2024-10-01  5:11   ` Ian Rogers
2024-10-01 23:58     ` Namhyung Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZvOmXH7gKzGKSh7y@google.com \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=aleksander.lobakin@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=davem@davemloft.net \
    --cc=hemant@linux.vnet.ibm.com \
    --cc=irogers@google.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=kjain@linux.ibm.com \
    --cc=leo.yan@arm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=przemyslaw.kitszel@intel.com \
    --cc=sesse@google.com \
    --cc=yangjihong@bytedance.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.