[sheepdog] [PATCH v1] dog: memory leak in trace_read_buffer

Hitoshi Mitake mitake.hitoshi at lab.ntt.co.jp
Tue Jul 22 11:48:05 CEST 2014


At Tue, 22 Jul 2014 17:24:40 +0800,
Robin Dong wrote:
> 
> [1  <multipart/alternative (7bit)>]
> [1.1  <text/plain; UTF-8 (7bit)>]
> Reviewed-by: Robin Dong <sanbai at taobao.com>

Applied, thanks.
Hitoshi

> 
> 
> 2014-07-22 17:13 GMT+08:00 Meng An <isolate000 at gmail.com>:
> 
> > From: meng an <isolate000 at gmail.com>
> >
> > In function trace_read_buffer, the pointer 'buf' is allocated
> > via xmalloc, but its memory is not released when returns.
> >
> > Signed-off-by: Meng An <anmeng.an at alibaba-inc.com>
> > ---
> >  dog/trace.c |   13 +++++++++----
> >  1 files changed, 9 insertions(+), 4 deletions(-)
> >
> > diff --git a/dog/trace.c b/dog/trace.c
> > index e3b6248..3c2856b 100644
> > --- a/dog/trace.c
> > +++ b/dog/trace.c
> > @@ -78,6 +78,7 @@ static const char *tracefile = "/tmp/tracefile";
> >  static int trace_read_buffer(void)
> >  {
> >         int ret, tfd;
> > +       int rval = EXIT_SUCCESS;
> >         struct sd_req hdr;
> >         struct sd_rsp *rsp = (struct sd_rsp *)&hdr;
> >  #define TRACE_BUF_LEN      (1024 * 1024 * 20)
> > @@ -86,7 +87,8 @@ static int trace_read_buffer(void)
> >         tfd = open(tracefile, O_CREAT | O_RDWR | O_APPEND | O_TRUNC, 0644);
> >         if (tfd < 0) {
> >                 sd_err("can't create tracefile");
> > -               return EXIT_SYSFAIL;
> > +               rval = EXIT_SYSFAIL;
> > +               goto out;
> >         }
> >
> >  read_buffer:
> > @@ -95,22 +97,25 @@ read_buffer:
> >
> >         ret = dog_exec_req(&sd_nid, &hdr, buf);
> >         if (ret < 0)
> > -               return EXIT_SYSFAIL;
> > +               rval = EXIT_SYSFAIL;
> > +               goto out;
> >
> >         if (rsp->result == SD_RES_AGAIN)
> >                 goto read_buffer;
> >
> >         if (rsp->result != SD_RES_SUCCESS) {
> >                 sd_err("Trace failed: %s", sd_strerror(rsp->result));
> > -               return EXIT_FAILURE;
> > +               rval = EXIT_FAILURE;
> > +               goto out;
> >         }
> >
> >         xwrite(tfd, buf, rsp->data_length);
> >         if (rsp->data_length == TRACE_BUF_LEN)
> >                 goto read_buffer;
> >
> > +out:
> >         free(buf);
> > -       return EXIT_SUCCESS;
> > +       return rval;
> >  }
> >
> >  static int trace_enable(int argc, char **argv)
> > --
> > 1.7.1
> >
> > --
> > sheepdog mailing list
> > sheepdog at lists.wpkg.org
> > http://lists.wpkg.org/mailman/listinfo/sheepdog
> >
> 
> 
> 
> -- 
> --
> Best Regard
> Robin Dong
> [1.2  <text/html; UTF-8 (quoted-printable)>]
> 
> [2  <text/plain; us-ascii (7bit)>]
> -- 
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog



More information about the sheepdog mailing list