]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: fix crash when hotplug a channel chr device with no target
authorLuyao Huang <lhuang@redhat.com>
Tue, 13 Jan 2015 08:41:05 +0000 (16:41 +0800)
committerJán Tomko <jtomko@redhat.com>
Tue, 13 Jan 2015 08:56:56 +0000 (09:56 +0100)
https://bugzilla.redhat.com/show_bug.cgi?id=1181408

When we try to hotplug a channel chr device with no target, we
will get success (which should fail) in virDomainChrDefParseXML,
because we use goto cleanup this place and return an incomplete
definition (with no target). In qemuDomainAttachChrDevice,
we add it to the domain definition, but fail to remove it from
there when chardev-add fails, because virDomainChrRemove
matches chardevices according to the target name.
The device definition is then freed in qemuDomainAttachDeviceFlags,
leaving a stale pointer in the domain definition.

Signed-off-by: Luyao Huang <lhuang@redhat.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
src/conf/domain_conf.c

index 57e99e6782ce1bed387e17fccb8c194e54ebc14a..3cbb93d67755fda030b23a99d9d88f495962a3f7 100644 (file)
@@ -8700,7 +8700,7 @@ virDomainChrDefParseXML(xmlXPathContextPtr ctxt,
 
     if (!seenTarget &&
         ((def->targetType = virDomainChrDefaultTargetType(def->deviceType)) < 0))
-        goto cleanup;
+        goto error;
 
     if (virDomainChrSourceDefParseXML(&def->source, node->children, flags, def,
                                       ctxt, vmSeclabels, nvmSeclabels) < 0)