[libvirt] [PATCH] node: Don't return invalid pointers

Peter Krempa posted 1 patch 6 years, 11 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/a2aee915b1747bb10f352f64371c3f16f7bf3cef.1495798764.git.pkrempa@redhat.com
src/node_device/node_device_driver.c | 8 ++++++--
src/test/test_driver.c               | 4 +++-
2 files changed, 9 insertions(+), 3 deletions(-)
[libvirt] [PATCH] node: Don't return invalid pointers
Posted by Peter Krempa 6 years, 11 months ago
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 | 8 ++++++--
 src/test/test_driver.c               | 4 +++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/src/node_device/node_device_driver.c b/src/node_device/node_device_driver.c
index ba3da6288..3a6eeaaae 100644
--- a/src/node_device/node_device_driver.c
+++ b/src/node_device/node_device_driver.c
@@ -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;
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 2db3f7ddf..9330d9ea6 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -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:
-- 
2.12.2

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH] node: Don't return invalid pointers
Posted by Ján Tomko 6 years, 11 months ago
On Fri, May 26, 2017 at 01:39:24PM +0200, Peter Krempa wrote:
>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 | 8 ++++++--
> src/test/test_driver.c               | 4 +++-
> 2 files changed, 9 insertions(+), 3 deletions(-)
>

ACK

Jan
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list