[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