On 03/22/2011 08:02 PM, Wen Congyang wrote:
Steps to reproduce this bug:
# cat usb.xml
<hostdev mode='subsystem' type='usb'>
<source>
<address bus='0x001' device='0x003'/>
</source>
</hostdev>
# virsh attach-device vm1 usb.xml
error: Failed to attach device from usb.xml
error: server closed connection:
The reason of this bug is that we set data.cgroup to NULL, and this will cause
libvirtd crashed.
usbDevice *usb;
- qemuCgroupData data = { vm, cgroup };
+ qemuCgroupData data;
if (virCgroupForDomain(driver->cgroup, vm->def->name, &cgroup, 0)
!=0 ) {
qemuReportError(VIR_ERR_INTERNAL_ERROR,
@@ -873,6 +873,8 @@ int qemuDomainAttachHostUsbDevice(struct qemud_driver *driver,
hostdev->source.subsys.u.usb.device)) == NULL)
goto error;
+ data.vm = vm;
+ data.cgroup = cgroup;
ACK. Latent bug introduced in commit b4d3434f, exposed by commit
f2512684. (That explains why I didn't see it - when I tested b4d3434f,
nothing dereferenced the NULL, and my testing of f2512684 wasn't as
thorough).
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org