]> xenbits.xensource.com Git - libvirt.git/commitdiff
network: Fix NULL dereference during error recovery
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 14 Apr 2011 12:03:46 +0000 (14:03 +0200)
committerLaine Stump <laine@laine.org>
Thu, 14 Apr 2011 14:56:17 +0000 (10:56 -0400)
This fixes: https://bugzilla.redhat.com/show_bug.cgi?id=696660

While starting a network, if brSetForwardDelay() fails, we go to err1
where we want to access macTapIfName variable which was just
VIR_FREE'd a few lines above. Instead, keep macTapIfName until we are
certain of success.

src/network/bridge_driver.c

index ea2bfd487d67e0237f89b21add1af6ea97df2de6..97d8ce027bfaff3812256a9e1e2d34a827b575a2 100644 (file)
@@ -1616,7 +1616,7 @@ networkStartNetworkDaemon(struct network_driver *driver,
     bool v4present = false, v6present = false;
     virErrorPtr save_err = NULL;
     virNetworkIpDefPtr ipdef;
-    char *macTapIfName;
+    char *macTapIfName = NULL;
 
     if (virNetworkObjIsActive(network)) {
         networkReportError(VIR_ERR_OPERATION_INVALID,
@@ -1657,7 +1657,6 @@ networkStartNetworkDaemon(struct network_driver *driver,
             VIR_FREE(macTapIfName);
             goto err0;
         }
-        VIR_FREE(macTapIfName);
     }
 
     /* Set bridge options */
@@ -1731,6 +1730,7 @@ networkStartNetworkDaemon(struct network_driver *driver,
         goto err5;
     }
 
+    VIR_FREE(macTapIfName);
     VIR_INFO(_("Starting up network '%s'"), network->def->name);
     network->active = 1;
 
@@ -1778,6 +1778,7 @@ networkStartNetworkDaemon(struct network_driver *driver,
                  macTapIfName, network->def->bridge,
                  virStrerror(err, ebuf, sizeof ebuf));
     }
+    VIR_FREE(macTapIfName);
 
  err0:
     if (!save_err)