vl: fix leak of qdict_crumple return value
Coverity reports that qemu_parse_config_group is returning without unrefing the "crumpled" dictionary in case its top level item is a list. But actually the contract with qemu_record_config_group is the same as for qemu_parse_config_group itself: if those function need to stash the dictionary they get, they have to take a reference themselves (currently this is never the case for either function). Therefore, just add an unconditional qobject_unref(crumpled) to qemu_parse_config_group. Reported-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
533883fd7e
commit
838e37007c
13
softmmu/vl.c
13
softmmu/vl.c
@ -2193,12 +2193,17 @@ static void qemu_parse_config_group(const char *group, QDict *qdict,
|
|||||||
if (!crumpled) {
|
if (!crumpled) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (qobject_type(crumpled) != QTYPE_QDICT) {
|
switch (qobject_type(crumpled)) {
|
||||||
assert(qobject_type(crumpled) == QTYPE_QLIST);
|
case QTYPE_QDICT:
|
||||||
|
qemu_record_config_group(group, qobject_to(QDict, crumpled), false, errp);
|
||||||
|
break;
|
||||||
|
case QTYPE_QLIST:
|
||||||
error_setg(errp, "Lists cannot be at top level of a configuration section");
|
error_setg(errp, "Lists cannot be at top level of a configuration section");
|
||||||
return;
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached();
|
||||||
}
|
}
|
||||||
qemu_record_config_group(group, qobject_to(QDict, crumpled), false, errp);
|
qobject_unref(crumpled);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void qemu_read_default_config_file(Error **errp)
|
static void qemu_read_default_config_file(Error **errp)
|
||||||
|
Loading…
Reference in New Issue
Block a user