diff --git a/libvirt-0.6.3-refresh-qemu-caps.patch b/libvirt-0.6.3-refresh-qemu-caps.patch new file mode 100644 index 0000000..804d54e --- /dev/null +++ b/libvirt-0.6.3-refresh-qemu-caps.patch @@ -0,0 +1,76 @@ +commit 0e51348cb9aeafe5e2fd6469a4bde0baa1eb8720 +Author: Cole Robinson +Date: Mon May 4 15:06:03 2009 -0400 + + Refresh QEMU driver capabilities for each getCapabilities call. + + Also fix up a couple issues where caps are accessed without locking + the driver structure. + +diff --git a/src/qemu_driver.c b/src/qemu_driver.c +index 23ea961..790dac6 100644 +--- a/src/qemu_driver.c ++++ b/src/qemu_driver.c +@@ -1885,10 +1885,12 @@ static int qemudGetNodeInfo(virConnectPtr conn, + + static char *qemudGetCapabilities(virConnectPtr conn) { + struct qemud_driver *driver = conn->privateData; +- char *xml; ++ char *xml = NULL; + + qemuDriverLock(driver); +- if ((xml = virCapabilitiesFormatXML(driver->caps)) == NULL) ++ virCapabilitiesFree(qemu_driver->caps); ++ if ((qemu_driver->caps = qemudCapsInit()) == NULL || ++ (xml = virCapabilitiesFormatXML(driver->caps)) == NULL) + virReportOOMError(conn); + qemuDriverUnlock(driver); + +@@ -3169,20 +3171,26 @@ cleanup: + return ret; + } + +-static int qemudNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr secmodel) ++static int qemudNodeGetSecurityModel(virConnectPtr conn, ++ virSecurityModelPtr secmodel) + { + struct qemud_driver *driver = (struct qemud_driver *)conn->privateData; + char *p; ++ int ret = 0; + +- if (!driver->securityDriver) +- return -2; ++ qemuDriverLock(driver); ++ if (!driver->securityDriver) { ++ ret = -2; ++ goto cleanup; ++ } + + p = driver->caps->host.secModel.model; + if (strlen(p) >= VIR_SECURITY_MODEL_BUFLEN-1) { + qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + _("security model string exceeds max %d bytes"), + VIR_SECURITY_MODEL_BUFLEN-1); +- return -1; ++ ret = -1; ++ goto cleanup; + } + strcpy(secmodel->model, p); + +@@ -3191,10 +3199,14 @@ static int qemudNodeGetSecurityModel(virConnectPtr conn, virSecurityModelPtr sec + qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, + _("security DOI string exceeds max %d bytes"), + VIR_SECURITY_DOI_BUFLEN-1); +- return -1; ++ ret = -1; ++ goto cleanup; + } + strcpy(secmodel->doi, p); +- return 0; ++ ++cleanup: ++ qemuDriverUnlock(driver); ++ return ret; + } + + /* TODO: check seclabel restore */ diff --git a/libvirt.spec b/libvirt.spec index 320218f..1abb74c 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -55,7 +55,7 @@ Summary: Library providing a simple API virtualization Name: libvirt Version: 0.6.3 -Release: 5%{?dist}%{?extra_release} +Release: 6%{?dist}%{?extra_release} License: LGPLv2+ Group: Development/Libraries Source: libvirt-%{version}.tar.gz @@ -63,6 +63,8 @@ Source: libvirt-%{version}.tar.gz # Patches cherry-picked from upstream Patch1: libvirt-0.6.3-shared-readonly-label.patch Patch2: libvirt-0.6.3-hostdev-managed.patch +# Refresh qemu caps when getCapabilities is called (bz 460649) +Patch3: libvirt-0.6.3-refresh-qemu-caps.patch # Not for upstream. Temporary hack till PulseAudio autostart # problems are sorted out when SELinux enforcing @@ -218,6 +220,7 @@ of recent versions of Linux (and other OSes). %setup -q %patch1 -p1 %patch2 -p1 +%patch3 -p1 %patch200 -p0 @@ -548,6 +551,9 @@ fi %endif %changelog +* Wed May 6 2009 Cole Robinson - 0.6.3-6.fc12 +- Refresh qemu caps when getCapabilities is called (bug #460649) + * Wed May 6 2009 Mark McLoughlin - 0.6.3-5.fc12 - Fix handling of (bug #499386)