]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
node: Don't return invalid pointers
authorPeter Krempa <pkrempa@redhat.com>
Fri, 26 May 2017 10:57:43 +0000 (12:57 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Fri, 26 May 2017 12:21:52 +0000 (14:21 +0200)
Commit 4337bc57be introduced code that would in certain error paths
unref the last reference of a pointer, but return it.

Clear the pointers before returning them.

src/node_device/node_device_driver.c
src/test/test_driver.c

index ba3da6288afc9a7ae66c03a7b964e7c319ce9252..3a6eeaaae49a77234a6009a17f487753f4aa3bd8 100644 (file)
@@ -241,8 +241,10 @@ nodeDeviceLookupByName(virConnectPtr conn, const char *name)
         goto cleanup;
 
     if ((ret = virGetNodeDevice(conn, name))) {
-        if (VIR_STRDUP(ret->parent, obj->def->parent) < 0)
+        if (VIR_STRDUP(ret->parent, obj->def->parent) < 0) {
             virObjectUnref(ret);
+            ret = NULL;
+        }
     }
 
  cleanup:
@@ -285,8 +287,10 @@ nodeDeviceLookupSCSIHostByWWN(virConnectPtr conn,
                             goto out;
 
                         if ((dev = virGetNodeDevice(conn, obj->def->name))) {
-                            if (VIR_STRDUP(dev->parent, obj->def->parent) < 0)
+                            if (VIR_STRDUP(dev->parent, obj->def->parent) < 0) {
                                 virObjectUnref(dev);
+                                dev = NULL;
+                            }
                         }
                         virNodeDeviceObjUnlock(obj);
                         goto out;
index 2db3f7ddfe9ca62cb9344d2baf3b6db483047dd0..9330d9ea62f5fe2e61f9591afdfa366c9dc61fed 100644 (file)
@@ -5331,8 +5331,10 @@ testNodeDeviceLookupByName(virConnectPtr conn, const char *name)
         goto cleanup;
 
     if ((ret = virGetNodeDevice(conn, name))) {
-        if (VIR_STRDUP(ret->parent, obj->def->parent) < 0)
+        if (VIR_STRDUP(ret->parent, obj->def->parent) < 0) {
             virObjectUnref(ret);
+            ret = NULL;
+        }
     }
 
  cleanup: