From: "Daniel P. Berrange" <berrange@redhat.com>
To: Stefan Hajnoczi <stefanha@gmail.com>
Cc: Quentin PEREZ <qperez@ocs.online.net>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] vl.c: fix memleaks with g_strdup+strtok
Date: Wed, 2 Mar 2016 11:13:36 +0000 [thread overview]
Message-ID: <20160302111336.GC16292@redhat.com> (raw)
In-Reply-To: <20160302110702.GC11268@stefanha-x1.localdomain>
On Wed, Mar 02, 2016 at 11:07:02AM +0000, Stefan Hajnoczi wrote:
> On Wed, Feb 24, 2016 at 10:22:14AM +0100, Quentin PEREZ wrote:
> > diff --git a/vl.c b/vl.c
> > index b87e292..9f6593a 100644
> > --- a/vl.c
> > +++ b/vl.c
> > @@ -1362,16 +1362,19 @@ static int add_semihosting_arg(void *opaque,
> > static inline void semihosting_arg_fallback(const char *file, const char *cmd)
> > {
> > char *cmd_token;
> > + char *dup_cmd;
> >
> > /* argv[0] */
> > add_semihosting_arg(&semihosting, "arg", file, NULL);
> >
> > /* split -append and initialize argv[1..n] */
> > - cmd_token = strtok(g_strdup(cmd), " ");
> > + dup_cmd = g_strdup(cmd);
> > + cmd_token = strtok(dup_cmd, " ");
> > while (cmd_token) {
> > add_semihosting_arg(&semihosting, "arg", cmd_token, NULL);
> > cmd_token = strtok(NULL, " ");
> > }
> > + g_free(dup_cmd);
>
> add_semihosting_arg() stashes the cmd_token pointer. semihosting.argv[]
> points to freed memory if you add g_free(dup_cmd).
>
> I suggest leaving the code as-is since the lifetime of the semihosting
> global variable spans the entire run-time of the QEMU process. It's not
> pretty but the leak is harmless.
>
> If you really want to fix it you may need to add a semihosting_cleanup()
> function to free strings.
If fixing it I'd probably suggest using g_strsplit() instead of
strdup+strtok too, as it accepts a const string & returns allocated
strings which is a nicer contract that strtok which modifies its arg
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
prev parent reply other threads:[~2016-03-02 11:13 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-24 9:22 [Qemu-devel] [PATCH] vl.c: fix memleaks with g_strdup+strtok Quentin PEREZ
2016-03-02 11:07 ` Stefan Hajnoczi
2016-03-02 11:13 ` Daniel P. Berrange [this message]
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=20160302111336.GC16292@redhat.com \
--to=berrange@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qperez@ocs.online.net \
--cc=stefanha@gmail.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.