On Thu, Dec 04, 2014 at 02:34:11PM +0800, arei.gong...@huawei.com wrote: > From: Gonglei <arei.gong...@huawei.com> > > Variable local_err going out of scope > leaks the storage it points to. > > Cc: Markus Armbruster <arm...@redhat.com> > Signed-off-by: Gonglei <arei.gong...@huawei.com> > --- > block/rbd.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/block/rbd.c b/block/rbd.c > index 5b5a64a..f3ab2dd 100644 > --- a/block/rbd.c > +++ b/block/rbd.c > @@ -459,7 +459,7 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict > *options, int flags, > clientname = qemu_rbd_parse_clientname(conf, clientname_buf); > r = rados_create(&s->cluster, clientname); > if (r < 0) { > - error_setg(&local_err, "error initializing"); > + error_setg(errp, "error initializing"); > goto failed_opts; > } > > @@ -495,19 +495,19 @@ static int qemu_rbd_open(BlockDriverState *bs, QDict > *options, int flags, > > r = rados_connect(s->cluster); > if (r < 0) { > - error_setg(&local_err, "error connecting"); > + error_setg(errp, "error connecting"); > goto failed_shutdown; > } > > r = rados_ioctx_create(s->cluster, pool, &s->io_ctx); > if (r < 0) { > - error_setg(&local_err, "error opening pool %s", pool); > + error_setg(errp, "error opening pool %s", pool); > goto failed_shutdown; > } > > r = rbd_open(s->io_ctx, s->name, &s->image, s->snap); > if (r < 0) { > - error_setg(&local_err, "error reading header from %s", s->name); > + error_setg(errp, "error reading header from %s", s->name); > goto failed_open; > }
'local_err' was defined for collecting error insider qemu_opts_absorb_qdict(). We should set error to 'errp', then the error can be passed to caller, and free the memory in future. Reviewed-by: Amos Kong <ak...@redhat.com> -- Amos.
signature.asc
Description: Digital signature