mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-10-14 23:13:30 +00:00
gluster: Plug memory leaks in qemu_gluster_parse_json()
To reproduce, run $ valgrind qemu-system-x86_64 --nodefaults -S --drive driver=gluster,volume=testvol,path=/a/b/c,server.0.type=xxx Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Niels de Vos <ndevos@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
e152ef7a98
commit
85a82e852d
|
@ -480,7 +480,7 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
|
||||||
QDict *options, Error **errp)
|
QDict *options, Error **errp)
|
||||||
{
|
{
|
||||||
QemuOpts *opts;
|
QemuOpts *opts;
|
||||||
GlusterServer *gsconf;
|
GlusterServer *gsconf = NULL;
|
||||||
GlusterServerList *curr = NULL;
|
GlusterServerList *curr = NULL;
|
||||||
QDict *backing_options = NULL;
|
QDict *backing_options = NULL;
|
||||||
Error *local_err = NULL;
|
Error *local_err = NULL;
|
||||||
|
@ -529,17 +529,16 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = qemu_opt_get(opts, GLUSTER_OPT_TYPE);
|
ptr = qemu_opt_get(opts, GLUSTER_OPT_TYPE);
|
||||||
gsconf = g_new0(GlusterServer, 1);
|
|
||||||
gsconf->type = qapi_enum_parse(GlusterTransport_lookup, ptr,
|
|
||||||
GLUSTER_TRANSPORT__MAX,
|
|
||||||
GLUSTER_TRANSPORT__MAX,
|
|
||||||
&local_err);
|
|
||||||
if (!ptr) {
|
if (!ptr) {
|
||||||
error_setg(&local_err, QERR_MISSING_PARAMETER, GLUSTER_OPT_TYPE);
|
error_setg(&local_err, QERR_MISSING_PARAMETER, GLUSTER_OPT_TYPE);
|
||||||
error_append_hint(&local_err, GERR_INDEX_HINT, i);
|
error_append_hint(&local_err, GERR_INDEX_HINT, i);
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
gsconf = g_new0(GlusterServer, 1);
|
||||||
|
gsconf->type = qapi_enum_parse(GlusterTransport_lookup, ptr,
|
||||||
|
GLUSTER_TRANSPORT__MAX, -1,
|
||||||
|
&local_err);
|
||||||
if (local_err) {
|
if (local_err) {
|
||||||
error_append_hint(&local_err,
|
error_append_hint(&local_err,
|
||||||
"Parameter '%s' may be 'tcp' or 'unix'\n",
|
"Parameter '%s' may be 'tcp' or 'unix'\n",
|
||||||
|
@ -626,8 +625,10 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
|
||||||
curr->next->value = gsconf;
|
curr->next->value = gsconf;
|
||||||
curr = curr->next;
|
curr = curr->next;
|
||||||
}
|
}
|
||||||
|
gsconf = NULL;
|
||||||
|
|
||||||
qdict_del(backing_options, str);
|
QDECREF(backing_options);
|
||||||
|
backing_options = NULL;
|
||||||
g_free(str);
|
g_free(str);
|
||||||
str = NULL;
|
str = NULL;
|
||||||
}
|
}
|
||||||
|
@ -636,11 +637,10 @@ static int qemu_gluster_parse_json(BlockdevOptionsGluster *gconf,
|
||||||
|
|
||||||
out:
|
out:
|
||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
|
qapi_free_GlusterServer(gsconf);
|
||||||
qemu_opts_del(opts);
|
qemu_opts_del(opts);
|
||||||
if (str) {
|
g_free(str);
|
||||||
qdict_del(backing_options, str);
|
QDECREF(backing_options);
|
||||||
g_free(str);
|
|
||||||
}
|
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue