]> xenbits.xensource.com Git - libvirt.git/commitdiff
networkRunHook: Run hook only if possible
authorMichal Privoznik <mprivozn@redhat.com>
Wed, 19 Feb 2014 13:55:23 +0000 (14:55 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 20 Feb 2014 07:56:17 +0000 (08:56 +0100)
Currently, networkRunHook() is called in networkAllocateActualDevice and
friends. These functions, however, doesn't necessarily work on networks,
For example, if domain's interface is defined in this fashion:

    <interface type='bridge'>
      <mac address='52:54:00:0b:3b:16'/>
      <source bridge='virbr1'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </interface>

The networkAllocateActualDevice jumps directly onto 'validate' label as
the interface is not type of 'network'. Hence, @network is left
initialized to NULL and networkRunHook(network, ...) is called. One of
the things that the hook function does is dereference @network. Soupir.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
src/network/bridge_driver.c

index ee264b99891636f5cd4b367a2afc47db26d1896b..a6c719df3e4afae97ffff5700f61cf109488a4a5 100644 (file)
@@ -150,6 +150,12 @@ networkRunHook(virNetworkObjPtr network,
     int ret = -1;
 
     if (virHookPresent(VIR_HOOK_DRIVER_NETWORK)) {
+        if (!network) {
+            VIR_DEBUG("Not running hook as @network is NULL");
+            ret = 0;
+            goto cleanup;
+        }
+
         virBufferAddLit(&buf, "<hookData>\n");
         virBufferAdjustIndent(&buf, 2);
         if (virNetworkDefFormatBuf(&buf, network->def, 0) < 0)