]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
fix two bugs in bridge_driver.c
authorHu Tao <hutao@cn.fujitsu.com>
Fri, 11 Nov 2011 08:20:19 +0000 (16:20 +0800)
committerEric Blake <eblake@redhat.com>
Fri, 11 Nov 2011 23:31:54 +0000 (16:31 -0700)
steps to reproduce:

1. having a network xml file(named default.xml) like this one:

<network>
  <name>default</name>
  <uuid>c5322c4c-81d0-4985-a363-ad6389780d89</uuid>
  <bridge name="virbr0" />
  <forward/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254" />
    </dhcp>
  </ip>
</network>

in /etc/libvirt/qemu/networks/, and mark it as autostart:

$ ls -l /etc/libvirt/qemu/networks/autostart
total 0
lrwxrwxrwx 1 root root 14 Oct 12 14:02 default.xml -> ../default.xml

2. start libvirtd and the device virbr0 is not automatically up.

The reason is that the function virNetDevExists is now returns 1 if
the device exists, comparing to the former one returns 0 if the device
exists. But with only this fix will cause a segmentation fault(the same
steps as above)  that is fixed by the second chunk of code.

src/network/bridge_driver.c

index a9e1252b943e1937ce577b4d4152cdbfa8d0a6b8..258f7c76ffd04f580efffe41fe9f11b296e59310 100644 (file)
@@ -213,7 +213,7 @@ networkFindActiveConfigs(struct network_driver *driver) {
 
         /* If bridge exists, then mark it active */
         if (obj->def->bridge &&
-            virNetDevExists(obj->def->bridge) == 0) {
+            virNetDevExists(obj->def->bridge) == 1) {
             obj->active = 1;
 
             /* Try and read dnsmasq/radvd pids if any */
@@ -1814,8 +1814,10 @@ networkStartNetworkVirtual(struct network_driver *driver,
     if (!save_err)
         save_err = virSaveLastError();
 
-    ignore_value(virNetDevTapDelete(macTapIfName));
-    VIR_FREE(macTapIfName);
+    if (macTapIfName) {
+        ignore_value(virNetDevTapDelete(macTapIfName));
+        VIR_FREE(macTapIfName);
+    }
 
  err0:
     if (!save_err)