]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix crashes in Xen capabilities code
authorDaniel P. Berrange <berrange@redhat.com>
Mon, 27 Jul 2009 15:45:01 +0000 (16:45 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Mon, 27 Jul 2009 15:45:01 +0000 (16:45 +0100)
* src/xen_internal.c: Don't free memory now owned by the virCapsPtr
   structure
* tests/testutilsxen.c: Fix up for change in internal API

src/xen_internal.c
tests/testutilsxen.c

index b75b1e8ec09c00757ace795137cf3a186d6459ee..b6bf10d91a868f6a0b601227132820fba2f693ce 100644 (file)
@@ -2223,8 +2223,7 @@ xenHypervisorBuildCapabilities(virConnectPtr conn,
             virCapabilitiesFreeMachines(machines, 1);
             goto no_memory;
         }
-
-        virCapabilitiesFreeMachines(machines, 1);
+        machines = NULL;
 
         if (virCapabilitiesAddGuestDomain(guest,
                                           "xen",
index 7685bd2cde1543b4f9b6a1bfa525f3c011354016..94c423f87282621ef9f504be43bef330a605a382 100644 (file)
@@ -9,6 +9,8 @@ virCapsPtr testXenCapsInit(void) {
     struct utsname utsname;
     virCapsPtr caps;
     virCapsGuestPtr guest;
+    virCapsGuestMachinePtr *machines;
+    int nmachines;
     static const char *const x86_machines[] = {
         "xenfv"
     };
@@ -21,10 +23,16 @@ virCapsPtr testXenCapsInit(void) {
                                    0, 0)) == NULL)
         return NULL;
 
+    nmachines = ARRAY_CARDINALITY(x86_machines);
+    if ((machines = virCapabilitiesAllocMachines(x86_machines, nmachines)) == NULL)
+        goto cleanup;
+
     if ((guest = virCapabilitiesAddGuest(caps, "hvm", "i686", 32,
                                          "/usr/lib/xen/bin/qemu-dm", NULL,
-                                         1, x86_machines)) == NULL)
+                                         nmachines, machines)) == NULL)
         goto cleanup;
+    machines = NULL;
+
     if (virCapabilitiesAddGuestDomain(guest,
                                       "xen",
                                       NULL,
@@ -33,10 +41,16 @@ virCapsPtr testXenCapsInit(void) {
                                       NULL) == NULL)
         goto cleanup;
 
+    nmachines = ARRAY_CARDINALITY(xen_machines);
+    if ((machines = virCapabilitiesAllocMachines(xen_machines, nmachines)) == NULL)
+        goto cleanup;
+
     if ((guest = virCapabilitiesAddGuest(caps, "xen", "i686", 32,
                                          "/usr/lib/xen/bin/qemu-dm", NULL,
-                                         1, xen_machines)) == NULL)
+                                         nmachines, machines)) == NULL)
         goto cleanup;
+    machines = NULL;
+
     if (virCapabilitiesAddGuestDomain(guest,
                                       "xen",
                                       NULL,
@@ -48,6 +62,7 @@ virCapsPtr testXenCapsInit(void) {
     return caps;
 
 cleanup:
+    virCapabilitiesFreeMachines(machines, nmachines);
     virCapabilitiesFree(caps);
     return NULL;
 }