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 <rongqing.li@windriver.com>
Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
This commit is contained in:
Roy Li 2016-05-24 13:28:00 +08:00 committed by Bruce Ashfield
parent 16a31ef4a8
commit dc7ab5bea5
2 changed files with 58 additions and 0 deletions

View File

@ -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"

View File

@ -0,0 +1,57 @@
From e9c4e2abffef007a28112ebb40a9586b0128f10b Mon Sep 17 00:00:00 2001
From: Pavel Hrdina <phrdina@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@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