[libvirt] [PATCH] util: fix bug found by Coverity

Laine Stump laine at laine.org
Tue Jun 25 16:11:53 UTC 2013


Commit 861d40565 added code (my personal change to "clean up" the
submitter's code, *not* the fault of the submitter) that dereferenced
virtVlan without first checking for NULL. This patch fixes that and,
as part of the fix, cleans up some unnecessary obtuseness.
---
John - Does this eliminate the Coverity complaints?

 src/util/virnetdevopenvswitch.c | 48 ++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 24 deletions(-)

diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
index 5834e4e..75b196c 100644
--- a/src/util/virnetdevopenvswitch.c
+++ b/src/util/virnetdevopenvswitch.c
@@ -81,9 +81,27 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
             goto out_of_memory;
     }
 
+    cmd = virCommandNew(OVSVSCTL);
+
+    virCommandAddArgList(cmd, "--timeout=5", "--", "--may-exist", "add-port",
+                        brname, ifname, NULL);
+
     if (virtVlan && virtVlan->nTags > 0) {
 
-        /* Trunk port first */
+        switch (virtVlan->nativeMode) {
+        case VIR_NATIVE_VLAN_MODE_TAGGED:
+            virCommandAddArg(cmd, "vlan_mode=native-tagged");
+            virCommandAddArgFormat(cmd, "tag=%d", virtVlan->nativeTag);
+            break;
+        case VIR_NATIVE_VLAN_MODE_UNTAGGED:
+            virCommandAddArg(cmd, "vlan_mode=native-untagged");
+            virCommandAddArgFormat(cmd, "tag=%d", virtVlan->nativeTag);
+            break;
+        case VIR_NATIVE_VLAN_MODE_DEFAULT:
+        default:
+            break;
+        }
+
         if (virtVlan->trunk) {
             virBufferAddLit(&buf, "trunk=");
 
@@ -99,33 +117,15 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
                 virBufferAddLit(&buf, ",");
                 virBufferAsprintf(&buf, "%d", virtVlan->tag[i]);
             }
+
+            if (virBufferError(&buf))
+                goto out_of_memory;
+            virCommandAddArg(cmd, virBufferCurrentContent(&buf));
         } else if (virtVlan->nTags) {
-            virBufferAsprintf(&buf, "tag=%d", virtVlan->tag[0]);
+            virCommandAddArgFormat(cmd, "tag=%d", virtVlan->tag[0]);
         }
     }
 
-    cmd = virCommandNew(OVSVSCTL);
-
-    virCommandAddArgList(cmd, "--timeout=5", "--", "--may-exist", "add-port",
-                        brname, ifname, NULL);
-
-    switch (virtVlan->nativeMode) {
-    case VIR_NATIVE_VLAN_MODE_TAGGED:
-        virCommandAddArg(cmd, "vlan_mode=native-tagged");
-        virCommandAddArgFormat(cmd, "tag=%d", virtVlan->nativeTag);
-        break;
-    case VIR_NATIVE_VLAN_MODE_UNTAGGED:
-        virCommandAddArg(cmd, "vlan_mode=native-untagged");
-        virCommandAddArgFormat(cmd, "tag=%d", virtVlan->nativeTag);
-        break;
-    case VIR_NATIVE_VLAN_MODE_DEFAULT:
-    default:
-        break;
-    }
-
-    if (virBufferUse(&buf) != 0)
-        virCommandAddArgList(cmd, virBufferCurrentContent(&buf), NULL);
-
     if (ovsport->profileID[0] == '\0') {
         virCommandAddArgList(cmd,
                         "--", "set", "Interface", ifname, attachedmac_ex_id,
-- 
1.7.11.7




More information about the libvir-list mailing list