From dc7ab5bea574500d745e0cef4c36c0cbeca1e251 Mon Sep 17 00:00:00 2001 From: Roy Li Date: Tue, 24 May 2016 13:28:00 +0800 Subject: libvirt-python: backport a patch to fix crash in getAllDomainStats Upstream libvirt 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. Signed-off-by: Roy Li Signed-off-by: Bruce Ashfield --- 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 c1dafe9d..405d5f74 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 00000000..0583a940 --- /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 +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 +--- + 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 + -- cgit v1.2.3-54-g00ecf