From 19c7980ee6ca94308313b440fd39f308b4ae844e Mon Sep 17 00:00:00 2001 From: Guannan Ren Date: Mon, 12 Mar 2012 23:50:02 +0800 Subject: [PATCH] qemu: fix segfault when detaching non-existent network device In qemuDomainDetachNetDevice, detach was being used before it had been validated. If no matching device was found, this resulted in a dereference of a NULL pointer. This behavior was a regression introduced in commit cf90342be0022520e25cfa258cef1034b229a100, so it has not been a part of any official libvirt release. --- src/qemu/qemu_hotplug.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 1e563545b6..e088a49121 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -2081,13 +2081,6 @@ qemuDomainDetachNetDevice(struct qemud_driver *driver, } } - if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_HOSTDEV) { - ret = qemuDomainDetachThisHostDevice(driver, vm, - virDomainNetGetActualHostdev(detach), - -1); - goto cleanup; - } - if (!detach) { qemuReportError(VIR_ERR_OPERATION_FAILED, _("network device %02x:%02x:%02x:%02x:%02x:%02x not found"), @@ -2097,6 +2090,13 @@ qemuDomainDetachNetDevice(struct qemud_driver *driver, goto cleanup; } + if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_HOSTDEV) { + ret = qemuDomainDetachThisHostDevice(driver, vm, + virDomainNetGetActualHostdev(detach), + -1); + goto cleanup; + } + if (!virDomainDeviceAddressIsValid(&detach->info, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI)) { qemuReportError(VIR_ERR_OPERATION_FAILED,