[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/4] block/gluster: using new qapi schema
From: |
Eric Blake |
Subject: |
Re: [Qemu-devel] [PATCH 3/4] block/gluster: using new qapi schema |
Date: |
Thu, 12 Nov 2015 14:37:41 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 |
On 11/12/2015 03:22 AM, Prasanna Kumar Kalever wrote:
> this patch adds GlusterConf to qapi/block-core.json
>
> Signed-off-by: Prasanna Kumar Kalever <address@hidden>
> ---
> block/gluster.c | 104
> +++++++++++++++++++++++++--------------------------
> qapi/block-core.json | 60 +++++++++++++++++++++++++++--
> 2 files changed, 109 insertions(+), 55 deletions(-)
One more comment:
> -static int qemu_gluster_parseuri(GlusterConf *gconf, const char *filename)
> +static int qemu_gluster_parseuri(BlockdevOptionsGluster **pgconf,
> + const char *filename)
> {
> + BlockdevOptionsGluster *gconf;
> URI *uri;
> QueryParams *qp = NULL;
> bool is_unix = false;
> @@ -155,20 +141,24 @@ static int qemu_gluster_parseuri(GlusterConf *gconf,
> const char *filename)
> return -EINVAL;
If we hit this early return, then *pgconf was never assigned...
> +static struct glfs *qemu_gluster_init(BlockdevOptionsGluster **pgconf,
> + const char *filename, Error **errp)
> {
> - struct glfs *glfs = NULL;
> + struct glfs *glfs;
> int ret;
> int old_errno;
> + BlockdevOptionsGluster *gconf;
but here, gconf is uninitialized,
>
> - ret = qemu_gluster_parseuri(gconf, filename);
> + ret = qemu_gluster_parseuri(&gconf, filename);
> if (ret < 0) {
> error_setg(errp, "Usage: file=gluster[+transport]://[host[:port]]/"
> "volume/path[?socket=...]");
which means we can goto out with it uninitialized...
> @@ -224,8 +225,9 @@ static struct glfs *qemu_gluster_init(GlusterConf *gconf,
> const char *filename,
> goto out;
> }
>
> - ret = glfs_set_volfile_server(glfs, gconf->transport, gconf->host,
> - gconf->port);
> + ret = glfs_set_volfile_server(glfs,
> +
> GlusterTransport_lookup[gconf->server->transport],
> + gconf->server->host, gconf->server->port);
> if (ret < 0) {
> goto out;
> }
...vs. here where we can goto out with it initialized.
So whatever solution you use to plug the leak must be careful to not
free uninitialized memory. Easiest solution - initialize gconf to NULL
before qemu_gluster_parseuri (or else go back to a *gconf parameter
rather than **pgconf).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature
- [Qemu-devel] [PATCH 0/4] block/gluster: add support for multiple gluster servers, Prasanna Kumar Kalever, 2015/11/12
- [Qemu-devel] [PATCH 1/4] block/gluster: rename [server, volname, image] -> [host, volume, path], Prasanna Kumar Kalever, 2015/11/12
- [Qemu-devel] [PATCH 2/4] block/gluster: code cleanup, Prasanna Kumar Kalever, 2015/11/12
- [Qemu-devel] [PATCH 3/4] block/gluster: using new qapi schema, Prasanna Kumar Kalever, 2015/11/12
- [Qemu-devel] [PATCH 4/4] block/gluster: add support for multiple gluster servers, Prasanna Kumar Kalever, 2015/11/12
- Re: [Qemu-devel] [PATCH 0/4] block/gluster: add support for multiple gluster servers, Eric Blake, 2015/11/12