summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--recipes-extended/libvirt/libvirt-python.inc1
-rw-r--r--recipes-extended/libvirt/libvirt/0001-fix-crash-in-getAllDomainStats.patch57
2 files changed, 58 insertions, 0 deletions
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}/*"
17 17
18SRC_URI += "http://libvirt.org/sources/python/libvirt-python-${PV}.tar.gz;name=libvirt_python" 18SRC_URI += "http://libvirt.org/sources/python/libvirt-python-${PV}.tar.gz;name=libvirt_python"
19SRC_URI += "file://libvirt_api_xml_path.patch;patchdir=../libvirt-python-${PV}" 19SRC_URI += "file://libvirt_api_xml_path.patch;patchdir=../libvirt-python-${PV}"
20SRC_URI += "file://0001-fix-crash-in-getAllDomainStats.patch;patchdir=../libvirt-python-${PV}"
20 21
21SRC_URI[libvirt_python.md5sum] = "ed018c714d7ddbe93221c796dff283ed" 22SRC_URI[libvirt_python.md5sum] = "ed018c714d7ddbe93221c796dff283ed"
22SRC_URI[libvirt_python.sha256sum] = "6d35ae9e7801573393b9c92471f39e6700d479f10b641df81d041b469f160bf8" 23SRC_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 @@
1From e9c4e2abffef007a28112ebb40a9586b0128f10b Mon Sep 17 00:00:00 2001
2From: Pavel Hrdina <phrdina@redhat.com>
3Date: Mon, 18 Apr 2016 16:53:50 +0200
4Subject: [PATCH] fix crash in getAllDomainStats
5
6Upstream-Status: Backport
7
8Commits 1d39dbaf and 827ed9b4 broke the libvirt-python API by removing
9virDomainRef() and virDomainFree(). virDomainStatsRecordListFree() will
10free that domain pointer and later when virDomain (python object) call
11its destructor and tries to free that same pointer again.
12
13Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1326839
14
15Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
16---
17 libvirt-override.c | 8 +++++++-
18 1 file changed, 7 insertions(+), 1 deletion(-)
19
20diff --git a/libvirt-override.c b/libvirt-override.c
21index 4640ed5..2de95ce 100644
22--- a/libvirt-override.c
23+++ b/libvirt-override.c
24@@ -8381,6 +8381,7 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records,
25 PyObject *py_retval;
26 PyObject *py_record;
27 PyObject *py_record_stats = NULL;
28+ virDomainPtr dom = NULL;
29 size_t i;
30
31 if (!(py_retval = PyList_New(nrecords)))
32@@ -8392,9 +8393,12 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records,
33
34 VIR_PY_LIST_SET_GOTO(py_retval, i, py_record, error);
35
36+ dom = records[i]->dom;
37+ virDomainRef(dom);
38 VIR_PY_TUPLE_SET_GOTO(py_record, 0,
39- libvirt_virDomainPtrWrap(records[i]->dom),
40+ libvirt_virDomainPtrWrap(dom),
41 error);
42+ dom = NULL;
43
44 if (!(py_record_stats = getPyVirTypedParameter(records[i]->params,
45 records[i]->nparams)))
46@@ -8406,6 +8410,8 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records,
47 return py_retval;
48
49 error:
50+ if (dom)
51+ virDomainFree(dom);
52 Py_XDECREF(py_retval);
53 return NULL;
54 }
55--
562.8.1
57