[meta-virtualization] [PATCH] libvirt-python: backport a patch to fix crash in getAllDomainStats

rongqing.li at windriver.com rongqing.li at windriver.com
Mon May 23 22:28:00 PDT 2016


From: Roy Li <rongqing.li at windriver.com>

Signed-off-by: Roy Li <rongqing.li at windriver.com>
---
 recipes-extended/libvirt/libvirt-python.inc        |  1 +
 .../0001-fix-crash-in-getAllDomainStats.patch      | 57 ++++++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100644 recipes-extended/libvirt/libvirt/0001-fix-crash-in-getAllDomainStats.patch

diff --git a/recipes-extended/libvirt/libvirt-python.inc b/recipes-extended/libvirt/libvirt-python.inc
index c1dafe9..405d5f7 100644
--- a/recipes-extended/libvirt/libvirt-python.inc
+++ b/recipes-extended/libvirt/libvirt-python.inc
@@ -17,6 +17,7 @@ FILES_${PN}-python = "${bindir}/* ${libdir}/* ${libdir}/${PYTHON_DIR}/*"
 
 SRC_URI += "http://libvirt.org/sources/python/libvirt-python-${PV}.tar.gz;name=libvirt_python"
 SRC_URI += "file://libvirt_api_xml_path.patch;patchdir=../libvirt-python-${PV}"
+SRC_URI += "file://0001-fix-crash-in-getAllDomainStats.patch;patchdir=../libvirt-python-${PV}"
 
 SRC_URI[libvirt_python.md5sum] = "ed018c714d7ddbe93221c796dff283ed"
 SRC_URI[libvirt_python.sha256sum] = "6d35ae9e7801573393b9c92471f39e6700d479f10b641df81d041b469f160bf8"
diff --git a/recipes-extended/libvirt/libvirt/0001-fix-crash-in-getAllDomainStats.patch b/recipes-extended/libvirt/libvirt/0001-fix-crash-in-getAllDomainStats.patch
new file mode 100644
index 0000000..0583a94
--- /dev/null
+++ b/recipes-extended/libvirt/libvirt/0001-fix-crash-in-getAllDomainStats.patch
@@ -0,0 +1,57 @@
+From e9c4e2abffef007a28112ebb40a9586b0128f10b Mon Sep 17 00:00:00 2001
+From: Pavel Hrdina <phrdina at redhat.com>
+Date: Mon, 18 Apr 2016 16:53:50 +0200
+Subject: [PATCH] fix crash in getAllDomainStats
+
+Upstream-Status: Backport
+
+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
+
-- 
2.8.1



More information about the meta-virtualization mailing list