All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: kwolf@redhat.com, lkurusa@redhat.com,
	zhanghailiang <zhang.zhanghailiang@huawei.com>,
	qemu-trivial@nongnu.org, jan.kiszka@siemens.com,
	riku.voipio@iki.fi, mjt@tls.msk.ru, qemu-devel@nongnu.org,
	peter.huangpeng@huawei.com, stefanha@redhat.com,
	luonengjun@huawei.com, pbonzini@redhat.com,
	alex.bennee@linaro.org, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH v6 02/10] monitor: fix access freed memory
Date: Sun, 17 Aug 2014 12:55:22 +0200	[thread overview]
Message-ID: <20140817105522.GF21622@redhat.com> (raw)
In-Reply-To: <20140815142551.5230d23a@redhat.com>

On Fri, Aug 15, 2014 at 02:25:51PM -0400, Luiz Capitulino wrote:
> On Thu, 14 Aug 2014 12:30:10 +0200
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
> 
> > On Thu, Aug 14, 2014 at 03:29:13PM +0800, zhanghailiang wrote:
> > > The function monitor_fdset_dup_fd_find_remove() references member of 'mon_fdset'
> > > which may be freed in function monitor_fdset_cleanup()
> > > 
> > > Reviewed-by: Gonglei <arei.gonglei@huawei.com>
> > > Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> > 
> > Id doesn't make sense after fdset is gone.
> > A cleaner way would be return -1 within that remove
> > clause.
> > 
> > --->
> > 
> > monitor: fix use after free
> > 
> > The function monitor_fdset_dup_fd_find_remove() references member of
> > 'mon_fdset' which - when remove flag is set - may be freed in function
> > monitor_fdset_cleanup().
> > remove is set by monitor_fdset_dup_fd_remove which in practice
> > does not need the returned value, so make it void,
> > and return -1 from monitor_fdset_dup_fd_find_remove.
> > 
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> 
> Looks correct to me, can you post as a toplevel patch please?

Done.

> > 
> > ---
> > 
> > diff --git a/include/monitor/monitor.h b/include/monitor/monitor.h
> > index 3d6929d..78a5fc8 100644
> > --- a/include/monitor/monitor.h
> > +++ b/include/monitor/monitor.h
> > @@ -64,7 +64,7 @@ AddfdInfo *monitor_fdset_add_fd(int fd, bool has_fdset_id, int64_t fdset_id,
> >                                  Error **errp);
> >  int monitor_fdset_get_fd(int64_t fdset_id, int flags);
> >  int monitor_fdset_dup_fd_add(int64_t fdset_id, int dup_fd);
> > -int monitor_fdset_dup_fd_remove(int dup_fd);
> > +void monitor_fdset_dup_fd_remove(int dup_fd);
> >  int monitor_fdset_dup_fd_find(int dup_fd);
> >  
> >  #endif /* !MONITOR_H */
> > diff --git a/monitor.c b/monitor.c
> > index 5bc70a6..ef28328 100644
> > --- a/monitor.c
> > +++ b/monitor.c
> > @@ -2541,8 +2541,10 @@ static int monitor_fdset_dup_fd_find_remove(int dup_fd, bool remove)
> >                      if (QLIST_EMPTY(&mon_fdset->dup_fds)) {
> >                          monitor_fdset_cleanup(mon_fdset);
> >                      }
> > +                    return -1;
> > +                } else {
> > +                    return mon_fdset->id;
> >                  }
> > -                return mon_fdset->id;
> >              }
> >          }
> >      }
> > @@ -2554,9 +2556,9 @@ int monitor_fdset_dup_fd_find(int dup_fd)
> >      return monitor_fdset_dup_fd_find_remove(dup_fd, false);
> >  }
> >  
> > -int monitor_fdset_dup_fd_remove(int dup_fd)
> > +void monitor_fdset_dup_fd_remove(int dup_fd)
> >  {
> > -    return monitor_fdset_dup_fd_find_remove(dup_fd, true);
> > +    monitor_fdset_dup_fd_find_remove(dup_fd, true);
> >  }
> >  
> >  int monitor_handle_fd_param(Monitor *mon, const char *fdname)
> > diff --git a/stubs/fdset-remove-fd.c b/stubs/fdset-remove-fd.c
> > index b3886d9..7f6d61e 100644
> > --- a/stubs/fdset-remove-fd.c
> > +++ b/stubs/fdset-remove-fd.c
> > @@ -1,7 +1,6 @@
> >  #include "qemu-common.h"
> >  #include "monitor/monitor.h"
> >  
> > -int monitor_fdset_dup_fd_remove(int dupfd)
> > +void monitor_fdset_dup_fd_remove(int dupfd)
> >  {
> > -    return -1;
> >  }
> > 

  parent reply	other threads:[~2014-08-17 10:55 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-14  7:29 [Qemu-devel] [PATCH v6 00/10] fix three bugs about use-after-free and several api abuse zhanghailiang
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 01/10] l2cap: fix access freed memory zhanghailiang
2014-08-14 10:19   ` Michael S. Tsirkin
2014-08-15 14:58   ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 02/10] monitor: " zhanghailiang
2014-08-14 10:30   ` Michael S. Tsirkin
2014-08-15 18:25     ` Luiz Capitulino
2014-08-17  9:45       ` Michael S. Tsirkin
2014-08-17 10:55       ` Michael S. Tsirkin [this message]
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 03/10] virtio-blk: fix reference a pointer which might be freed zhanghailiang
2014-08-14 10:37   ` Michael S. Tsirkin
2014-08-14 10:39     ` Michael Tokarev
2014-08-14 11:16       ` Michael S. Tsirkin
2014-08-18 11:49   ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2014-08-18 20:17     ` Michael S. Tsirkin
2014-08-19  7:19       ` Michael Tokarev
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 04/10] ivshmem: check the value returned by fstat() zhanghailiang
2014-08-14 10:12   ` Michael S. Tsirkin
2014-08-15 14:59   ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 05/10] util/path: Use the GLib memory allocation routines zhanghailiang
2014-08-14 10:15   ` Michael S. Tsirkin
2014-08-18  5:59     ` zhanghailiang
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 06/10] slirp/misc: Use g_malloc() instead of malloc() zhanghailiang
2014-08-14 10:31   ` Michael S. Tsirkin
2014-08-18  0:29     ` zhanghailiang
2014-08-18  5:56     ` zhanghailiang
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 07/10] linux-user: check return value " zhanghailiang
2014-08-14 13:31   ` Riku Voipio
2014-08-14 18:04     ` Michael Tokarev
2014-08-18 20:17     ` Michael S. Tsirkin
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 08/10] tests/bios-tables-test: check the value returned by fopen() zhanghailiang
2014-08-14 10:32   ` Michael S. Tsirkin
2014-08-18  0:32     ` zhanghailiang
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 09/10] tcg: check return value of fopen() zhanghailiang
2014-08-14 10:33   ` Michael S. Tsirkin
2014-08-15 15:03     ` [Qemu-devel] [Qemu-trivial] " Michael Tokarev
2014-08-15 16:53       ` Richard Henderson
2014-08-18  6:21         ` zhanghailiang
2014-08-14  7:29 ` [Qemu-devel] [PATCH v6 10/10] block/vvfat: fix setbuf stream parameter may be NULL zhanghailiang
2014-08-14 10:36   ` Michael S. Tsirkin
2014-08-18  0:55     ` zhanghailiang
2014-08-14 10:17 ` [Qemu-devel] [PATCH v6 00/10] fix three bugs about use-after-free and several api abuse Michael S. Tsirkin
2014-08-14 10:38 ` Michael S. Tsirkin

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=20140817105522.GF21622@redhat.com \
    --to=mst@redhat.com \
    --cc=alex.bennee@linaro.org \
    --cc=jan.kiszka@siemens.com \
    --cc=kwolf@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=lkurusa@redhat.com \
    --cc=luonengjun@huawei.com \
    --cc=mjt@tls.msk.ru \
    --cc=pbonzini@redhat.com \
    --cc=peter.huangpeng@huawei.com \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-trivial@nongnu.org \
    --cc=riku.voipio@iki.fi \
    --cc=rth@twiddle.net \
    --cc=stefanha@redhat.com \
    --cc=zhang.zhanghailiang@huawei.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.