[libvirt] [python PATCH] fix crash in getAllDomainStats

Pavel Hrdina phrdina at redhat.com
Mon Apr 18 15:07:48 UTC 2016


Commits 1d39dbaf and 827ed9b4 broke the libvirt-python API by removing
virDomainRef() and virDomainFree().  virDomainStatsRecordListFree() will
free that domain pointer and later when virDomain (python object) call
its destructor and tries to free that same pointer again.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1326839

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 libvirt-override.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/libvirt-override.c b/libvirt-override.c
index 4640ed5..2de95ce 100644
--- a/libvirt-override.c
+++ b/libvirt-override.c
@@ -8381,6 +8381,7 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records,
     PyObject *py_retval;
     PyObject *py_record;
     PyObject *py_record_stats = NULL;
+    virDomainPtr dom = NULL;
     size_t i;
 
     if (!(py_retval = PyList_New(nrecords)))
@@ -8392,9 +8393,12 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records,
 
         VIR_PY_LIST_SET_GOTO(py_retval, i, py_record, error);
 
+        dom = records[i]->dom;
+        virDomainRef(dom);
         VIR_PY_TUPLE_SET_GOTO(py_record, 0,
-                              libvirt_virDomainPtrWrap(records[i]->dom),
+                              libvirt_virDomainPtrWrap(dom),
                               error);
+        dom = NULL;
 
         if (!(py_record_stats = getPyVirTypedParameter(records[i]->params,
                                                        records[i]->nparams)))
@@ -8406,6 +8410,8 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records,
     return py_retval;
 
  error:
+    if (dom)
+        virDomainFree(dom);
     Py_XDECREF(py_retval);
     return NULL;
 }
-- 
2.8.1




More information about the libvir-list mailing list