Devel
Threads by month
- ----- 2026 -----
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- 9 participants
- 40089 discussions
13 Dec '18
-object memory-backend-file[,align=][,pmem=]
Signed-off-by: Luyao Zhong <luyao.zhong(a)intel.com>
---
src/qemu/qemu_capabilities.c | 8 +++++++-
src/qemu/qemu_capabilities.h | 4 ++++
tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml | 1 +
tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 +
tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 2 ++
tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml | 2 ++
13 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 9258bf6..8b518b1 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -516,7 +516,11 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST,
"memory-backend-memfd.hugetlb",
"iothread.poll-max-ns",
"machine.pseries.cap-nested-hv",
- "egl-headless.rendernode"
+ "egl-headless.rendernode",
+ "memory-backend-file.align",
+
+ /* 325 */
+ "memory-backend-file.pmem",
);
@@ -1366,6 +1370,8 @@ static virQEMUCapsObjectTypeProps virQEMUCapsDeviceProps[] = {
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendFile[] = {
{ "discard-data", QEMU_CAPS_OBJECT_MEMORY_FILE_DISCARD },
+ { "align", QEMU_CAPS_OBJECT_MEMORY_FILE_ALIGN },
+ { "pmem", QEMU_CAPS_OBJECT_MEMORY_FILE_PMEM },
};
static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsMemoryBackendMemfd[] = {
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index c109887..f10b9a9 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -501,6 +501,10 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
QEMU_CAPS_IOTHREAD_POLLING, /* -object iothread.poll-max-ns */
QEMU_CAPS_MACHINE_PSERIES_CAP_NESTED_HV, /* -machine pseries.cap-nested-hv */
QEMU_CAPS_EGL_HEADLESS_RENDERNODE, /* -display egl-headless,rendernode= */
+ QEMU_CAPS_OBJECT_MEMORY_FILE_ALIGN, /* -object memory-backend-file,align= */
+
+ /* 325 */
+ QEMU_CAPS_OBJECT_MEMORY_FILE_PMEM, /* -object memory-backend-file,pmem= */
QEMU_CAPS_LAST /* this must always be the last item */
} virQEMUCapsFlags;
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
index 8dd90f5..186a6cc 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
@@ -165,6 +165,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>2011090</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>345725</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
index e646103..c47ebd7 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
@@ -163,6 +163,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>2011090</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>426509</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
index b18bd74..49249f5 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml
@@ -132,6 +132,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>2012000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>375102</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
index ac97e16..54c4a65 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
@@ -206,6 +206,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>2011090</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>414371</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
index f11d860..24a3c2b 100644
--- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
@@ -163,6 +163,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>2012050</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>444946</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml b/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml
index 552b319..1b5d8e6 100644
--- a/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml
+++ b/tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml
@@ -103,6 +103,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>3000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>0</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml
index 4f9832d..3c76f63 100644
--- a/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml
@@ -103,6 +103,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>3000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>0</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml
index 1c4177c..8569de6 100644
--- a/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml
@@ -134,6 +134,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>3000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>388416</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
index b2d98a6..15df8a5 100644
--- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
@@ -208,6 +208,7 @@
<flag name='memory-backend-memfd'/>
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
+ <flag name='memory-backend-file.align'/>
<version>3000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>425972</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
index b06b173..175233a 100644
--- a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
@@ -166,6 +166,8 @@
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
<flag name='machine.pseries.cap-nested-hv'/>
+ <flag name='memory-backend-file.align'/>
+ <flag name='memory-backend-file.pmem'/>
<version>3000091</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>437731</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
index 6c9c0c6..faafbcd 100644
--- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
@@ -209,6 +209,8 @@
<flag name='memory-backend-memfd.hugetlb'/>
<flag name='iothread.poll-max-ns'/>
<flag name='egl-headless.rendernode'/>
+ <flag name='memory-backend-file.align'/>
+ <flag name='memory-backend-file.pmem'/>
<version>3000092</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>440395</microcodeVersion>
--
2.7.4
2
2
Hi libvirt experts,
This is the RFC v3 for updating NVDIMM support in libvirt.
There are some gaps between qemu and libvirt, libvirt has not
supported several config options about NVDIMM memory while
qemu is ready now, including 'align', 'pmem', 'unarmed'.
I reworded and recoded my patches according to some feedback
comments from community once more.
But I met some issues I can't handle. I list them as follows:
a. add qemu_capabilities check
I want to add some nvdimm-related qemu_capabilities check, just
like 'QEMU_CAPS_OBJECT_MEMORY_FILE_ALIGN' in patch 2/4, and
I try to add the relevant sections into *.replies files manually.
But the qemucapabilitiestest failed, I don't know why. It seems
something wrong with the *.replies file. I think the *.replies
doesn't depends on other code or file, right? Could you help me address
this issue? The test log doesn't give me any useful info.
b. DO_TEST & DO_TEST_CAPS_LATEST
In the previous patches, several experts suggest me using
DO_TEST_CAPS_LATEST, but the testcases will fail. I guess it may
be related to the qemu_capabilities check I mentioned above. I'm
not sure if this issue will disappeared when the first one is be
resolved.
Besides, the whole nvdimm stuff do not introduce enough qemu_capabilities
check and do not use DO_TEST_CAPS_LATEST. Maybe it is better to do these
modification in another patch set. Or we can rely on qemu errors, it's just
what libvirt do currently. What' your comments?
Thank you in advance.
Regards,
Luyao Zhong
Luyao Zhong (4):
nvdimm: introduce more config elements into xml for NVDIMM memory
nvdimm: add nvdimm-related qemucapabilities check
nvdimm: update qemu command-line generating for NVDIMM memory
nvdimm: update news.xml
docs/formatdomain.html.in | 80 ++++++++++++++++++----
docs/news.xml | 9 +++
docs/schemas/domaincommon.rng | 23 ++++++-
src/conf/domain_conf.c | 61 +++++++++++++++--
src/conf/domain_conf.h | 3 +
src/qemu/qemu_capabilities.c | 8 ++-
src/qemu/qemu_capabilities.h | 4 ++
src/qemu/qemu_command.c | 32 +++++++++
tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml | 1 +
tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 +
tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.riscv32.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.riscv64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.s390x.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 2 +
tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml | 2 +
.../memory-hotplug-nvdimm-align.args | 31 +++++++++
.../memory-hotplug-nvdimm-align.xml | 58 ++++++++++++++++
.../memory-hotplug-nvdimm-pmem.args | 31 +++++++++
.../memory-hotplug-nvdimm-pmem.xml | 58 ++++++++++++++++
.../memory-hotplug-nvdimm-unarmed.args | 31 +++++++++
.../memory-hotplug-nvdimm-unarmed.xml | 58 ++++++++++++++++
tests/qemuxml2argvtest.c | 11 +++
.../memory-hotplug-nvdimm-align.xml | 1 +
.../memory-hotplug-nvdimm-pmem.xml | 1 +
.../memory-hotplug-nvdimm-unarmed.xml | 1 +
tests/qemuxml2xmltest.c | 3 +
30 files changed, 491 insertions(+), 26 deletions(-)
create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.args
create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-align.xml
create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.args
create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-pmem.xml
create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-unarmed.args
create mode 100644 tests/qemuxml2argvdata/memory-hotplug-nvdimm-unarmed.xml
create mode 120000 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-align.xml
create mode 120000 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-pmem.xml
create mode 120000 tests/qemuxml2xmloutdata/memory-hotplug-nvdimm-unarmed.xml
--
2.7.4
2
2
[libvirt] [PATCH 0/2] Sanitize header file conditionals and layout
by Daniel P. Berrangé 13 Dec '18
by Daniel P. Berrangé 13 Dec '18
13 Dec '18
This series was inspired by the cleanup proposed by Michal in his recent
security driver work. I pointed out the mess he was cleaning up was in
fact across the entire codebase:
https://www.redhat.com/archives/libvir-list/2018-December/msg00136.html
This series addresses it globally
Daniel P. Berrangé (2):
Fix many mistakes & inconsistencies in header file layout
Enforce a standard header file guard symbol name
build-aux/header-ifdef.pl | 156 ++++++++++++++++++++
cfg.mk | 7 +-
docs/apibuild.py | 2 +
include/libvirt/libvirt-admin.h | 6 +-
include/libvirt/libvirt-domain-snapshot.h | 6 +-
include/libvirt/libvirt-domain.h | 6 +-
include/libvirt/libvirt-event.h | 6 +-
include/libvirt/libvirt-host.h | 6 +-
include/libvirt/libvirt-interface.h | 6 +-
include/libvirt/libvirt-lxc.h | 6 +-
include/libvirt/libvirt-network.h | 6 +-
include/libvirt/libvirt-nodedev.h | 6 +-
include/libvirt/libvirt-nwfilter.h | 6 +-
include/libvirt/libvirt-qemu.h | 6 +-
include/libvirt/libvirt-secret.h | 6 +-
include/libvirt/libvirt-storage.h | 6 +-
include/libvirt/libvirt-stream.h | 6 +-
include/libvirt/libvirt.h | 6 +-
include/libvirt/virterror.h | 6 +-
src/access/viraccessdriver.h | 6 +-
src/access/viraccessdrivernop.h | 6 +-
src/access/viraccessdriverpolkit.h | 6 +-
src/access/viraccessdriverstack.h | 6 +-
src/access/viraccessmanager.h | 6 +-
src/access/viraccessperm.h | 6 +-
src/admin/admin_server.h | 6 +-
src/admin/admin_server_dispatch.h | 6 +-
src/bhyve/bhyve_capabilities.h | 6 +-
src/bhyve/bhyve_command.h | 6 +-
src/bhyve/bhyve_conf.h | 6 +-
src/bhyve/bhyve_device.h | 6 +-
src/bhyve/bhyve_domain.h | 6 +-
src/bhyve/bhyve_driver.h | 6 +-
src/bhyve/bhyve_monitor.h | 6 +-
src/bhyve/bhyve_parse_command.h | 6 +-
src/bhyve/bhyve_process.h | 6 +-
src/bhyve/bhyve_utils.h | 6 +-
src/conf/capabilities.h | 6 +-
src/conf/cpu_conf.h | 6 +-
src/conf/device_conf.h | 6 +-
src/conf/domain_addr.h | 6 +-
src/conf/domain_audit.h | 6 +-
src/conf/domain_capabilities.h | 6 +-
src/conf/domain_conf.h | 6 +-
src/conf/domain_event.h | 9 +-
src/conf/domain_nwfilter.h | 7 +-
src/conf/interface_conf.h | 6 +-
src/conf/netdev_bandwidth_conf.h | 6 +-
src/conf/netdev_vlan_conf.h | 6 +-
src/conf/netdev_vport_profile_conf.h | 6 +-
src/conf/network_conf.h | 6 +-
src/conf/network_event.h | 12 +-
src/conf/networkcommon_conf.h | 6 +-
src/conf/node_device_conf.h | 6 +-
src/conf/node_device_event.h | 12 +-
src/conf/node_device_util.h | 6 +-
src/conf/numa_conf.h | 6 +-
src/conf/nwfilter_conf.h | 7 +-
src/conf/nwfilter_ipaddrmap.h | 6 +-
src/conf/nwfilter_params.h | 7 +-
src/conf/object_event.h | 10 +-
src/conf/object_event_private.h | 8 +-
src/conf/secret_conf.h | 7 +-
src/conf/secret_event.h | 12 +-
src/conf/snapshot_conf.h | 6 +-
src/conf/storage_adapter_conf.h | 6 +-
src/conf/storage_conf.h | 6 +-
src/conf/storage_event.h | 12 +-
src/conf/virchrdev.h | 8 +-
src/conf/virdomainobjlist.h | 6 +-
src/conf/virinterfaceobj.h | 6 +-
src/conf/virnetworkobj.h | 6 +-
src/conf/virnodedeviceobj.h | 6 +-
src/conf/virnwfilterbindingdef.h | 7 +-
src/conf/virnwfilterbindingobj.h | 7 +-
src/conf/virnwfilterbindingobjlist.h | 6 +-
src/conf/virnwfilterobj.h | 7 +-
src/conf/virsavecookie.h | 7 +-
src/conf/virsecretobj.h | 6 +-
src/conf/virstorageobj.h | 6 +-
src/cpu/cpu.h | 6 +-
src/cpu/cpu_arm.h | 6 +-
src/cpu/cpu_map.h | 6 +-
src/cpu/cpu_ppc64.h | 6 +-
src/cpu/cpu_ppc64_data.h | 6 +-
src/cpu/cpu_s390.h | 6 +-
src/cpu/cpu_x86.h | 6 +-
src/cpu/cpu_x86_data.h | 6 +-
src/datatypes.h | 6 +-
src/driver-hypervisor.h | 6 +-
src/driver-interface.h | 6 +-
src/driver-network.h | 6 +-
src/driver-nodedev.h | 6 +-
src/driver-nwfilter.h | 6 +-
src/driver-secret.h | 6 +-
src/driver-state.h | 6 +-
src/driver-storage.h | 6 +-
src/driver-stream.h | 6 +-
src/driver.h | 6 +-
src/esx/esx_driver.h | 6 +-
src/esx/esx_interface_driver.h | 6 +-
src/esx/esx_network_driver.h | 6 +-
src/esx/esx_private.h | 6 +-
src/esx/esx_storage_backend_iscsi.h | 6 +-
src/esx/esx_storage_backend_vmfs.h | 6 +-
src/esx/esx_storage_driver.h | 6 +-
src/esx/esx_stream.h | 6 +-
src/esx/esx_util.h | 6 +-
src/esx/esx_vi.h | 6 +-
src/esx/esx_vi_methods.h | 6 +-
src/esx/esx_vi_types.h | 6 +-
src/hyperv/hyperv_driver.h | 6 +-
src/hyperv/hyperv_private.h | 6 +-
src/hyperv/hyperv_util.h | 6 +-
src/hyperv/hyperv_wmi.h | 6 +-
src/hyperv/hyperv_wmi_classes.h | 6 +-
src/hyperv/openwsman.h | 6 +-
src/interface/interface_driver.h | 7 +-
src/internal.h | 6 +-
src/libvirt_internal.h | 6 +-
src/libxl/libxl_capabilities.h | 6 +-
src/libxl/libxl_conf.h | 6 +-
src/libxl/libxl_domain.h | 6 +-
src/libxl/libxl_driver.h | 6 +-
src/libxl/libxl_logger.h | 6 +-
src/libxl/libxl_migration.h | 6 +-
src/locking/domain_lock.h | 6 +-
src/locking/lock_daemon.h | 6 +-
src/locking/lock_daemon_config.h | 6 +-
src/locking/lock_daemon_dispatch.h | 6 +-
src/locking/lock_driver.h | 6 +-
src/locking/lock_driver_lockd.h | 6 +-
src/locking/lock_driver_nop.h | 6 +-
src/locking/lock_manager.h | 6 +-
src/logging/log_daemon.h | 6 +-
src/logging/log_daemon_config.h | 6 +-
src/logging/log_daemon_dispatch.h | 6 +-
src/logging/log_handler.h | 6 +-
src/logging/log_manager.h | 7 +-
src/lxc/lxc_cgroup.h | 6 +-
src/lxc/lxc_conf.h | 6 +-
src/lxc/lxc_container.h | 6 +-
src/lxc/lxc_domain.h | 7 +-
src/lxc/lxc_driver.h | 6 +-
src/lxc/lxc_fuse.h | 6 +-
src/lxc/lxc_hostdev.h | 6 +-
src/lxc/lxc_monitor.h | 6 +-
src/lxc/lxc_native.h | 6 +-
src/lxc/lxc_process.h | 6 +-
src/network/bridge_driver.h | 7 +-
src/network/bridge_driver_platform.h | 6 +-
src/node_device/node_device_driver.h | 6 +-
src/node_device/node_device_hal.h | 6 +-
src/node_device/node_device_udev.h | 13 +-
src/nwfilter/nwfilter_dhcpsnoop.h | 6 +-
src/nwfilter/nwfilter_driver.h | 6 +-
src/nwfilter/nwfilter_ebiptables_driver.h | 7 +-
src/nwfilter/nwfilter_gentech_driver.h | 7 +-
src/nwfilter/nwfilter_learnipaddr.h | 6 +-
src/nwfilter/nwfilter_tech_driver.h | 6 +-
src/openvz/openvz_conf.h | 6 +-
src/openvz/openvz_driver.h | 7 +-
src/openvz/openvz_util.h | 7 +-
src/phyp/phyp_driver.h | 6 +-
src/qemu/qemu_agent.h | 7 +-
src/qemu/qemu_alias.h | 6 +-
src/qemu/qemu_block.h | 6 +-
src/qemu/qemu_blockjob.h | 6 +-
src/qemu/qemu_capabilities.c | 2 +-
src/qemu/qemu_capabilities.h | 6 +-
src/qemu/qemu_capspriv.h | 11 +-
src/qemu/qemu_cgroup.h | 6 +-
src/qemu/qemu_command.h | 6 +-
src/qemu/qemu_conf.h | 6 +-
src/qemu/qemu_domain.h | 6 +-
src/qemu/qemu_domain_address.h | 7 +-
src/qemu/qemu_driver.h | 6 +-
src/qemu/qemu_extdevice.h | 7 +-
src/qemu/qemu_hostdev.h | 6 +-
src/qemu/qemu_hotplug.c | 1 +
src/qemu/qemu_hotplug.h | 6 +-
src/qemu/qemu_hotplugpriv.h | 10 +-
src/qemu/qemu_interface.h | 6 +-
src/qemu/qemu_migration.h | 6 +-
src/qemu/qemu_migration_cookie.h | 6 +-
src/qemu/qemu_migration_params.c | 1 +
src/qemu/qemu_migration_params.h | 6 +-
src/qemu/qemu_migration_paramspriv.h | 10 +-
src/qemu/qemu_monitor.c | 2 +-
src/qemu/qemu_monitor.h | 7 +-
src/qemu/qemu_monitor_json.h | 7 +-
src/qemu/qemu_monitor_priv.h | 10 +-
src/qemu/qemu_monitor_text.h | 7 +-
src/qemu/qemu_parse_command.h | 6 +-
src/qemu/qemu_process.c | 1 +
src/qemu/qemu_process.h | 6 +-
src/qemu/qemu_processpriv.h | 10 +-
src/qemu/qemu_qapi.h | 6 +-
src/qemu/qemu_security.h | 6 +-
src/qemu/qemu_tpm.h | 7 +-
src/remote/remote_daemon.h | 7 +-
src/remote/remote_daemon_config.h | 6 +-
src/remote/remote_daemon_dispatch.h | 6 +-
src/remote/remote_daemon_stream.h | 7 +-
src/remote/remote_driver.h | 6 +-
src/rpc/virkeepalive.h | 6 +-
src/rpc/virnetclient.h | 6 +-
src/rpc/virnetclientprogram.h | 6 +-
src/rpc/virnetclientstream.h | 6 +-
src/rpc/virnetdaemon.h | 6 +-
src/rpc/virnetlibsshsession.h | 7 +-
src/rpc/virnetmessage.h | 6 +-
src/rpc/virnetsaslcontext.h | 6 +-
src/rpc/virnetserver.h | 6 +-
src/rpc/virnetserverclient.h | 6 +-
src/rpc/virnetservermdns.h | 6 +-
src/rpc/virnetserverprogram.h | 6 +-
src/rpc/virnetserverservice.h | 6 +-
src/rpc/virnetsocket.h | 6 +-
src/rpc/virnetsshsession.h | 7 +-
src/rpc/virnettlscontext.h | 6 +-
src/secret/secret_driver.h | 6 +-
src/secret/secret_util.h | 6 +-
src/security/security_apparmor.h | 7 +-
src/security/security_dac.h | 8 +-
src/security/security_driver.h | 7 +-
src/security/security_manager.h | 6 +-
src/security/security_nop.h | 6 +-
src/security/security_selinux.h | 7 +-
src/security/security_stack.h | 8 +-
src/storage/storage_backend.h | 6 +-
src/storage/storage_backend_disk.h | 6 +-
src/storage/storage_backend_fs.h | 6 +-
src/storage/storage_backend_gluster.h | 6 +-
src/storage/storage_backend_iscsi.h | 6 +-
src/storage/storage_backend_iscsi_direct.h | 22 ++-
src/storage/storage_backend_logical.h | 6 +-
src/storage/storage_backend_mpath.h | 6 +-
src/storage/storage_backend_rbd.h | 6 +-
src/storage/storage_backend_scsi.h | 6 +-
src/storage/storage_backend_sheepdog.c | 1 +
src/storage/storage_backend_sheepdog.h | 6 +-
src/storage/storage_backend_sheepdog_priv.h | 10 +-
src/storage/storage_backend_vstorage.h | 6 +-
src/storage/storage_backend_zfs.h | 6 +-
src/storage/storage_driver.h | 6 +-
src/storage/storage_file_fs.h | 6 +-
src/storage/storage_file_gluster.h | 6 +-
src/storage/storage_util.h | 6 +-
src/test/test_driver.h | 6 +-
src/uml/uml_conf.h | 6 +-
src/uml/uml_driver.h | 7 +-
src/util/viralloc.h | 7 +-
src/util/virarch.h | 6 +-
src/util/virarptable.h | 6 +-
src/util/viratomic.h | 6 +-
src/util/viraudit.h | 7 +-
src/util/virauth.h | 6 +-
src/util/virauthconfig.h | 6 +-
src/util/virbitmap.h | 6 +-
src/util/virbuffer.h | 6 +-
src/util/vircgroup.c | 2 +-
src/util/vircgroup.h | 6 +-
src/util/vircgroupbackend.c | 3 +-
src/util/vircgroupbackend.h | 6 +-
src/util/vircgrouppriv.h | 10 +-
src/util/vircgroupv1.c | 3 +-
src/util/vircgroupv1.h | 6 +-
src/util/vircgroupv2.c | 3 +-
src/util/vircgroupv2.h | 6 +-
src/util/virclosecallbacks.h | 6 +-
src/util/vircommand.c | 2 +-
src/util/vircommand.h | 6 +-
src/util/vircommandpriv.h | 10 +-
src/util/virconf.h | 6 +-
src/util/vircrypto.h | 6 +-
src/util/virdbus.c | 1 +
src/util/virdbus.h | 6 +-
src/util/virdbuspriv.h | 10 +-
src/util/virdevmapper.h | 6 +-
src/util/virdnsmasq.h | 6 +-
src/util/virebtables.h | 6 +-
src/util/virendian.h | 6 +-
src/util/virerror.h | 6 +-
src/util/virevent.h | 6 +-
src/util/vireventpoll.h | 6 +-
src/util/virfcp.h | 6 +-
src/util/virfdstream.h | 7 +-
src/util/virfile.h | 7 +-
src/util/virfilecache.h | 6 +-
src/util/virfirewall.c | 3 +-
src/util/virfirewall.h | 6 +-
src/util/virfirewallpriv.h | 10 +-
src/util/virfirmware.h | 6 +-
src/util/virgettext.h | 7 +-
src/util/virgic.h | 6 +-
src/util/virhash.h | 6 +-
src/util/virhashcode.h | 6 +-
src/util/virhook.h | 6 +-
src/util/virhostcpu.c | 1 +
src/util/virhostcpu.h | 6 +-
src/util/virhostcpupriv.h | 10 +-
src/util/virhostdev.h | 6 +-
src/util/virhostmem.h | 6 +-
src/util/viridentity.h | 6 +-
src/util/virinitctl.h | 6 +-
src/util/viriptables.h | 6 +-
src/util/viriscsi.h | 7 +-
src/util/virjson.h | 7 +-
src/util/virkeycode.h | 6 +-
src/util/virkeyfile.h | 6 +-
src/util/virkmod.h | 6 +-
src/util/virlease.h | 7 +-
src/util/virlockspace.h | 6 +-
src/util/virlog.h | 6 +-
src/util/virmacaddr.h | 6 +-
src/util/virmacmap.h | 7 +-
src/util/virmdev.h | 6 +-
src/util/virmodule.h | 6 +-
src/util/virnetdev.h | 6 +-
src/util/virnetdevbandwidth.h | 6 +-
src/util/virnetdevbridge.h | 6 +-
src/util/virnetdevip.h | 6 +-
src/util/virnetdevmacvlan.h | 6 +-
src/util/virnetdevmidonet.h | 6 +-
src/util/virnetdevopenvswitch.h | 6 +-
src/util/virnetdevtap.h | 6 +-
src/util/virnetdevveth.h | 6 +-
src/util/virnetdevvlan.h | 7 +-
src/util/virnetdevvportprofile.h | 6 +-
src/util/virnetlink.h | 6 +-
src/util/virnodesuspend.h | 7 +-
src/util/virnuma.h | 6 +-
src/util/virobject.h | 6 +-
src/util/virpci.h | 6 +-
src/util/virperf.h | 6 +-
src/util/virpidfile.h | 6 +-
src/util/virpolkit.h | 6 +-
src/util/virportallocator.h | 6 +-
src/util/virprobe.h | 6 +-
src/util/virprocess.h | 6 +-
src/util/virqemu.h | 7 +-
src/util/virrandom.h | 6 +-
src/util/virresctrl.c | 1 +
src/util/virresctrl.h | 6 +-
src/util/virresctrlpriv.h | 10 +-
src/util/virrotatingfile.h | 6 +-
src/util/virscsi.h | 6 +-
src/util/virscsihost.h | 6 +-
src/util/virscsivhost.h | 6 +-
src/util/virseclabel.h | 6 +-
src/util/virsecret.h | 6 +-
src/util/virsexpr.h | 6 +-
src/util/virsocketaddr.h | 6 +-
src/util/virstorageencryption.h | 6 +-
src/util/virstoragefile.h | 6 +-
src/util/virstoragefilebackend.h | 6 +-
src/util/virstring.h | 6 +-
src/util/virsysinfo.c | 2 +-
src/util/virsysinfo.h | 6 +-
src/util/virsysinfopriv.h | 10 +-
src/util/virsystemd.c | 2 +-
src/util/virsystemd.h | 6 +-
src/util/virsystemdpriv.h | 10 +-
src/util/virthread.h | 6 +-
src/util/virthreadjob.h | 6 +-
src/util/virthreadpool.h | 6 +-
src/util/virtime.h | 6 +-
src/util/virtpm.h | 7 +-
src/util/virtypedparam.h | 7 +-
src/util/viruri.h | 6 +-
src/util/virusb.h | 6 +-
src/util/virutil.h | 6 +-
src/util/viruuid.h | 6 +-
src/util/virvhba.h | 6 +-
src/util/virvsock.h | 6 +-
src/util/virxdrdefs.h | 6 +-
src/util/virxml.h | 6 +-
src/vbox/vbox_MSCOMGlue.h | 6 +-
src/vbox/vbox_common.h | 6 +-
src/vbox/vbox_driver.h | 10 +-
src/vbox/vbox_get_driver.h | 6 +-
src/vbox/vbox_glue.h | 6 +-
src/vbox/vbox_snapshot_conf.h | 6 +-
src/vbox/vbox_uniformed_api.h | 6 +-
src/vmware/vmware_conf.h | 8 +-
src/vmware/vmware_driver.h | 11 +-
src/vmx/vmx.h | 6 +-
src/vz/vz_driver.h | 6 +-
src/vz/vz_sdk.h | 9 +-
src/vz/vz_utils.h | 8 +-
src/xenapi/xenapi_driver.h | 7 +-
src/xenapi/xenapi_driver_private.h | 7 +-
src/xenapi/xenapi_utils.h | 6 +-
src/xenconfig/xen_common.h | 6 +-
src/xenconfig/xen_sxpr.h | 6 +-
src/xenconfig/xen_xl.h | 6 +-
src/xenconfig/xen_xm.h | 6 +-
src/xenconfig/xenxs_private.h | 6 +-
tests/cputest.c | 3 +-
tests/networkxml2firewalltest.c | 4 +-
tests/nwfilterebiptablestest.c | 4 +-
tests/nwfilterxml2firewalltest.c | 4 +-
tests/qemucapabilitiestest.c | 4 +-
tests/qemucapsprobe.c | 2 +-
tests/qemucpumock.c | 3 +-
tests/qemuhotplugtest.c | 1 +
tests/qemumigparamstest.c | 1 +
tests/qemumonitorjsontest.c | 1 +
tests/qemumonitortestutils.c | 1 +
tests/qemumonitortestutils.h | 6 +-
tests/qemuxml2argvtest.c | 3 +-
tests/storagebackendsheepdogtest.c | 1 +
tests/sysinfotest.c | 2 +-
tests/testutils.h | 6 +-
tests/testutilshostcpus.h | 27 +++-
tests/testutilslxc.h | 27 +++-
tests/testutilsqemu.c | 2 +-
tests/testutilsqemu.h | 35 ++++-
tests/testutilsqemuschema.h | 11 +-
tests/testutilsxen.h | 22 ++-
tests/vircgrouptest.c | 2 +-
tests/virdbustest.c | 2 +-
tests/virfilewrapper.h | 5 +-
tests/virfirewalltest.c | 6 +-
tests/virhashdata.h | 21 +++
tests/virhostcputest.c | 1 +
tests/viriscsitest.c | 3 +-
tests/virkmodtest.c | 2 +-
tests/virmock.h | 6 +-
tests/virnetdevbandwidthtest.c | 2 +-
tests/virnettlshelpers.h | 17 ++-
tests/virresctrltest.c | 1 +
tests/virsystemdtest.c | 2 +-
tools/nss/libvirt_nss.h | 6 +-
tools/virsh-completer.h | 6 +-
tools/virsh-console.h | 6 +-
tools/virsh-domain-monitor.h | 6 +-
tools/virsh-domain.h | 6 +-
tools/virsh-host.h | 6 +-
tools/virsh-interface.h | 6 +-
tools/virsh-network.h | 6 +-
tools/virsh-nodedev.h | 6 +-
tools/virsh-nwfilter.h | 6 +-
tools/virsh-pool.h | 6 +-
tools/virsh-secret.h | 6 +-
tools/virsh-snapshot.h | 6 +-
tools/virsh-util.h | 6 +-
tools/virsh-volume.h | 6 +-
tools/virsh.h | 6 +-
tools/virt-admin-completer.h | 6 +-
tools/virt-admin.h | 6 +-
tools/virt-host-validate-bhyve.h | 6 +-
tools/virt-host-validate-common.h | 6 +-
tools/virt-host-validate-lxc.h | 6 +-
tools/virt-host-validate-qemu.h | 6 +-
tools/vsh-table.h | 6 +-
tools/vsh.h | 6 +-
tools/wireshark/src/packet-libvirt.h | 7 +-
459 files changed, 1685 insertions(+), 1358 deletions(-)
create mode 100644 build-aux/header-ifdef.pl
--
2.19.2
2
3
While working on cgroup v2 devices and doing some extended testing I
figured out that there are two issues with the current code.
Pavel Hrdina (2):
vircgroup: introduce virCgroupKillRecursiveCB
vircgroupv2: fix virCgroupV2ValidateMachineGroup
src/util/vircgroup.c | 69 ++++++++++++++++++++-----------------
src/util/vircgroupbackend.h | 7 ++++
src/util/vircgrouppriv.h | 8 +++++
src/util/vircgroupv1.c | 16 +++++++++
src/util/vircgroupv2.c | 22 ++++++++++++
5 files changed, 90 insertions(+), 32 deletions(-)
--
2.19.2
2
5
13 Dec '18
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
Pushed as a trivial fix
src/qemu/qemu_hotplug.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 72b09f92ca..68d021afbb 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -5964,7 +5964,7 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver,
if (qemuIsMultiFunctionDevice(vm->def, &detach->info)) {
virReportError(VIR_ERR_OPERATION_FAILED,
_("cannot hot unplug multifunction PCI device: %s"),
- dev->data.disk->dst);
+ detach->ifname);
goto cleanup;
}
--
2.19.2
1
0
[libvirt] [PATCH] storage: Fix build issue with MOUNT and VGCHANGE commands
by John Ferlan 13 Dec '18
by John Ferlan 13 Dec '18
13 Dec '18
Turns out there some build platforms that must not define MOUNT
or VGCHANGE in config.h... So moving the commands from the storage
backend specific module into a common storage_util module causes
issues for those platforms.
So instead of assuming they are there, let's just pass the command
string to the storage util API's from the storage backend specific
code (as would have been successful before). Also modify the test
to determine whether the MOUNT and/or VGCHANGE doesn't exist and
just define it to (for example) what Fedora has for the path. Could
have just used "mount" and "vgchange" in the call, but that defeats
the purpose of adding the call to virTestClearCommandPath.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
Although it is a build breaker I figured I'd wait before pushing to ensure
no one had heartburn over my selected solution of just restoring the onus
of the MOUNT and VGCHANGE back to the storage backend specific module as
opposed to trying to use #ifdef's in the common module and of course the
testing code. This just seemed to be the path of least resistance.
src/storage/storage_backend_fs.c | 2 +-
src/storage/storage_backend_logical.c | 2 +-
src/storage/storage_util.c | 10 ++++++----
src/storage/storage_util.h | 6 ++++--
tests/storagepoolxml2argvtest.c | 11 +++++++++--
5 files changed, 21 insertions(+), 10 deletions(-)
diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index c5e75627b5..37feff79d1 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -330,7 +330,7 @@ virStorageBackendFileSystemMount(virStoragePoolObjPtr pool)
if (!(src = virStorageBackendFileSystemGetPoolSource(pool)))
return -1;
- cmd = virStorageBackendFileSystemMountCmd(def, src);
+ cmd = virStorageBackendFileSystemMountCmd(MOUNT, def, src);
if (virCommandRun(cmd, NULL) < 0)
goto cleanup;
diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
index 12fff651e8..0059e24308 100644
--- a/src/storage/storage_backend_logical.c
+++ b/src/storage/storage_backend_logical.c
@@ -52,7 +52,7 @@ virStorageBackendLogicalSetActive(virStoragePoolObjPtr pool,
{
int ret;
virStoragePoolDefPtr def = virStoragePoolObjGetDef(pool);
- virCommandPtr cmd = virStorageBackendLogicalChangeCmd(def, on);
+ virCommandPtr cmd = virStorageBackendLogicalChangeCmd(VGCHANGE, def, on);
ret = virCommandRun(cmd, NULL);
virCommandFree(cmd);
diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
index 01f3c93008..a84ee5b600 100644
--- a/src/storage/storage_util.c
+++ b/src/storage/storage_util.c
@@ -4312,7 +4312,8 @@ virStorageBackendFileSystemMountDefaultArgs(virCommandPtr cmd,
virCommandPtr
-virStorageBackendFileSystemMountCmd(virStoragePoolDefPtr def,
+virStorageBackendFileSystemMountCmd(const char *cmdstr,
+ virStoragePoolDefPtr def,
const char *src)
{
/* 'mount -t auto' doesn't seem to auto determine nfs (or cifs),
@@ -4326,7 +4327,7 @@ virStorageBackendFileSystemMountCmd(virStoragePoolDefPtr def,
def->source.format == VIR_STORAGE_POOL_NETFS_CIFS);
virCommandPtr cmd = NULL;
- cmd = virCommandNew(MOUNT);
+ cmd = virCommandNew(cmdstr);
if (netauto)
virStorageBackendFileSystemMountNFSArgs(cmd, src, def);
else if (glusterfs)
@@ -4340,10 +4341,11 @@ virStorageBackendFileSystemMountCmd(virStoragePoolDefPtr def,
virCommandPtr
-virStorageBackendLogicalChangeCmd(virStoragePoolDefPtr def,
+virStorageBackendLogicalChangeCmd(const char *cmdstr,
+ virStoragePoolDefPtr def,
bool on)
{
- return virCommandNewArgList(VGCHANGE,
+ return virCommandNewArgList(cmdstr,
on ? "-aly" : "-aln",
def->source.name,
NULL);
diff --git a/src/storage/storage_util.h b/src/storage/storage_util.h
index a2ef2ac07d..d0cb5d9884 100644
--- a/src/storage/storage_util.h
+++ b/src/storage/storage_util.h
@@ -181,11 +181,13 @@ char *
virStorageBackendFileSystemGetPoolSource(virStoragePoolObjPtr pool);
virCommandPtr
-virStorageBackendFileSystemMountCmd(virStoragePoolDefPtr def,
+virStorageBackendFileSystemMountCmd(const char *cmdstr,
+ virStoragePoolDefPtr def,
const char *src);
virCommandPtr
-virStorageBackendLogicalChangeCmd(virStoragePoolDefPtr def,
+virStorageBackendLogicalChangeCmd(const char *cmdstr,
+ virStoragePoolDefPtr def,
bool on);
#endif /* __VIR_STORAGE_UTIL_H__ */
diff --git a/tests/storagepoolxml2argvtest.c b/tests/storagepoolxml2argvtest.c
index 534cb21144..196989cb6d 100644
--- a/tests/storagepoolxml2argvtest.c
+++ b/tests/storagepoolxml2argvtest.c
@@ -9,6 +9,13 @@
#define VIR_FROM_THIS VIR_FROM_NONE
+#ifndef MOUNT
+# define MOUNT "/usr/bin/mount"
+#endif
+
+#ifndef VGCHANGE
+# define VGCHANGE "/usr/sbin/vgchange"
+#endif
static int
testCompareXMLToArgvFiles(bool shouldFail,
@@ -40,11 +47,11 @@ testCompareXMLToArgvFiles(bool shouldFail,
goto cleanup;
}
- cmd = virStorageBackendFileSystemMountCmd(def, src);
+ cmd = virStorageBackendFileSystemMountCmd(MOUNT, def, src);
break;
case VIR_STORAGE_POOL_LOGICAL:
- cmd = virStorageBackendLogicalChangeCmd(def, true);
+ cmd = virStorageBackendLogicalChangeCmd(VGCHANGE, def, true);
break;
case VIR_STORAGE_POOL_DIR:
--
2.17.2
1
0
13 Dec '18
Support for nested KVM is handled via a kernel module configuration
parameters values for kvm_intel, kvm_amd, kvm_hv (PPC), or kvm (s390).
While it's possible to fetch the kmod config values via virKModConfig,
unfortunately that is the static value and we need to get the
current/dynamic value from the kernel file system.
So this patch adds a new API virHostKVMSupportsNesting that will
search the 3 kernel modules to get the nesting value and check if
it is 'Y' (or 'y' just in case) or '1' to return a true/false whether
the KVM kernel supports nesting.
We need to do this in order to handle cases where adjustments to
the value are made after libvirtd is started to force a refetch of
the latest QEMU capabilities since the correct CPU settings need
to be made for a guest to add the "vmx=on" to/for the guest config.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
NB to be removed before push - I got data from:
(IBM Z) https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/ht…
(PPC slide 131) https://events.linuxfoundation.org/wp-content/uploads/2017/12/Taking-it-to-…
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
v2: https://www.redhat.com/archives/libvir-list/2018-November/msg00955.html
Changes from code review...
- Rename variables/API's to KVMSupportsNested
- Movement of logic to check/set the 'nested' to inside locations that
ensure KVM was enabled (via capability).
- Change of logic to not use virKModConfig and instead look at the
running kernel value for /sys/module/*/parameters/nested where *
is kvm_intel, kvm_amd, kvm_hv, or kvm
src/qemu/qemu_capabilities.c | 54 ++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 20a1a0c201..bef92a679f 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -558,6 +558,7 @@ struct _virQEMUCaps {
virObject parent;
bool usedQMP;
+ bool kvmSupportsNesting;
char *binary;
time_t ctime;
@@ -1530,6 +1531,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
return NULL;
ret->usedQMP = qemuCaps->usedQMP;
+ ret->kvmSupportsNesting = qemuCaps->kvmSupportsNesting;
if (VIR_STRDUP(ret->binary, qemuCaps->binary) < 0)
goto error;
@@ -3589,6 +3591,9 @@ virQEMUCapsLoadCache(virArch hostArch,
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KVM);
virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU);
+ if (virXPathBoolean("boolean(./kvmSupportsNesting)", ctxt) > 0)
+ qemuCaps->kvmSupportsNesting = true;
+
ret = 0;
cleanup:
VIR_FREE(str);
@@ -3808,6 +3813,9 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps)
if (qemuCaps->sevCapabilities)
virQEMUCapsFormatSEVInfo(qemuCaps, &buf);
+ if (qemuCaps->kvmSupportsNesting)
+ virBufferAddLit(&buf, "<kvmSupportsNesting/>\n");
+
virBufferAdjustIndent(&buf, -2);
virBufferAddLit(&buf, "</qemuCaps>\n");
@@ -3848,6 +3856,41 @@ virQEMUCapsSaveFile(void *data,
}
+/* Check the kernel module parameters 'nested' file to determine if enabled
+ *
+ * Intel: 'kvm_intel' uses 'Y'
+ * AMD: 'kvm_amd' uses '1'
+ * PPC64: 'kvm_hv' uses 'Y'
+ * S390: 'kvm' uses '1'
+ */
+static bool
+virQEMUCapsKVMSupportsNesting(void)
+{
+ static char const * const kmod[] = {"kvm_intel", "kvm_amd",
+ "kvm_hv", "kvm"};
+ VIR_AUTOFREE(char *) value = NULL;
+ int rc;
+ size_t i;
+
+ for (i = 0; i < ARRAY_CARDINALITY(kmod); i++) {
+ VIR_FREE(value);
+ rc = virFileReadValueString(&value, "/sys/module/%s/parameters/nested",
+ kmod[i]);
+ if (rc == -2)
+ continue;
+ if (rc < 0) {
+ virResetLastError();
+ return false;
+ }
+
+ if (value[0] == 'Y' || value[0] == 'y' || value[0] == '1')
+ return true;
+ }
+
+ return false;
+}
+
+
static bool
virQEMUCapsIsValid(void *data,
void *privData)
@@ -3856,6 +3899,7 @@ virQEMUCapsIsValid(void *data,
virQEMUCapsCachePrivPtr priv = privData;
bool kvmUsable;
struct stat sb;
+ bool kvmSupportsNesting;
if (!qemuCaps->binary)
return true;
@@ -3933,6 +3977,14 @@ virQEMUCapsIsValid(void *data,
qemuCaps->kernelVersion);
return false;
}
+
+ kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
+ if (kvmSupportsNesting != qemuCaps->kvmSupportsNesting) {
+ VIR_DEBUG("Outdated capabilities for '%s': kvm kernel nested "
+ "value changed from %d",
+ qemuCaps->binary, qemuCaps->kvmSupportsNesting);
+ return false;
+ }
}
return true;
@@ -4576,6 +4628,8 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
if (VIR_STRDUP(qemuCaps->kernelVersion, kernelVersion) < 0)
goto error;
+
+ qemuCaps->kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
}
cleanup:
--
2.17.2
2
3
[libvirt] [PATCH] secret: Add check/validation for correct usage when LookupByUUID
by John Ferlan 13 Dec '18
by John Ferlan 13 Dec '18
13 Dec '18
If virSecretGetSecretString is using by secretLookupByUUID,
then it's possible the found sec->usageType doesn't match the
desired @secretUsageType. If this occurs for the encrypted
volume creation processing and a subsequent pool refresh is
executed, then the secret used to create the volume will not
be found by the storageBackendLoadDefaultSecrets which expects
to find secrets by VIR_SECRET_USAGE_TYPE_VOLUME.
Add a check to virSecretGetSecretString to avoid the possibility
along with an error indicating the incorrect matched types.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
If someone has an idea regarding how the usage could be filled
in "properly" for the qemuxml2argvtest, I'm willing to give it
a shot. However, fair warning trying to "mock" for tls, volume,
iscsi, and ceph could be rather painful. Thus the NONE was the
well, easiest way to go since the stored secret (ahem) shouldn't
be of usageType "none" (famous last words).
src/secret/secret_util.c | 17 +++++++++++++++++
tests/qemuxml2argvtest.c | 4 +++-
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/secret/secret_util.c b/src/secret/secret_util.c
index 16e43ab2cc..27e164a425 100644
--- a/src/secret/secret_util.c
+++ b/src/secret/secret_util.c
@@ -71,6 +71,23 @@ virSecretGetSecretString(virConnectPtr conn,
if (!sec)
goto cleanup;
+ /* NB: NONE is a byproduct of the qemuxml2argvtest test mocking
+ * for UUID lookups. Normal secret XML processing would fail if
+ * the usage type was NONE and since we have no way to set the
+ * expected usage in that environment, let's just accept NONE */
+ if (sec->usageType != VIR_SECRET_USAGE_TYPE_NONE &&
+ sec->usageType != secretUsageType) {
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+
+ virUUIDFormat(seclookupdef->u.uuid, uuidstr);
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("secret with uuid %s is of type '%s' not "
+ "expected '%s' type"),
+ uuidstr, virSecretUsageTypeToString(sec->usageType),
+ virSecretUsageTypeToString(secretUsageType));
+ goto cleanup;
+ }
+
*secret = conn->secretDriver->secretGetValue(sec, secret_size, 0,
VIR_SECRET_GET_VALUE_INTERNAL_CALL);
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index e17709e7e1..700868ca0b 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -77,7 +77,9 @@ static virSecretPtr
fakeSecretLookupByUUID(virConnectPtr conn,
const unsigned char *uuid)
{
- return virGetSecret(conn, uuid, 0, "");
+ /* NB: This mocked value could be "tls" or "volume" depending on
+ * which test is being run, we'll leave at NONE (or 0) */
+ return virGetSecret(conn, uuid, VIR_SECRET_USAGE_TYPE_NONE, "");
}
static virSecretDriver fakeSecretDriver = {
--
2.17.2
2
6
13 Dec '18
Referring to commit fab2e49d, it should be one and only secret for encryption.
Signed-off-by: Han Han <hhan(a)redhat.com>
---
docs/schemas/storagecommon.rng | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/docs/schemas/storagecommon.rng b/docs/schemas/storagecommon.rng
index 9d17d934de..63b51470a0 100644
--- a/docs/schemas/storagecommon.rng
+++ b/docs/schemas/storagecommon.rng
@@ -24,9 +24,7 @@
</choice>
</attribute>
<interleave>
- <zeroOrMore>
- <ref name='secret'/>
- </zeroOrMore>
+ <ref name='secret'/>
<optional>
<element name='cipher'>
<ref name='keycipher'/>
--
2.20.0.rc2
2
1
[libvirt] [PATCH] remote: check & report OOM in make_nonnull_XXX methods
by Daniel P. Berrangé 13 Dec '18
by Daniel P. Berrangé 13 Dec '18
13 Dec '18
The make_nonnull_XXX methods can all fail due to OOM but this was being
silently ignored and thus also not checked by callers. Make the methods
propagate errors and use ATTRIBUTE_RETURN_CHECK to force callers to deal
with it.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
src/admin/admin_server_dispatch.c | 9 +-
src/remote/remote_daemon_dispatch.c | 393 +++++++++++++++++++++-------
src/rpc/gendispatch.pl | 19 +-
3 files changed, 315 insertions(+), 106 deletions(-)
diff --git a/src/admin/admin_server_dispatch.c b/src/admin/admin_server_dispatch.c
index b78ff902c0..9fa2893fa3 100644
--- a/src/admin/admin_server_dispatch.c
+++ b/src/admin/admin_server_dispatch.c
@@ -115,11 +115,13 @@ get_nonnull_server(virNetDaemonPtr dmn, admin_nonnull_server srv)
return virNetDaemonGetServer(dmn, srv.name);
}
-static void
+static int ATTRIBUTE_RETURN_CHECK
make_nonnull_server(admin_nonnull_server *srv_dst,
virNetServerPtr srv_src)
{
- ignore_value(VIR_STRDUP_QUIET(srv_dst->name, virNetServerGetName(srv_src)));
+ if (VIR_STRDUP(srv_dst->name, virNetServerGetName(srv_src)) < 0)
+ return -1;
+ return 0;
}
static virNetServerClientPtr
@@ -128,13 +130,14 @@ get_nonnull_client(virNetServerPtr srv, admin_nonnull_client clnt)
return virNetServerGetClient(srv, clnt.id);
}
-static void
+static int
make_nonnull_client(admin_nonnull_client *clt_dst,
virNetServerClientPtr clt_src)
{
clt_dst->id = virNetServerClientGetID(clt_src);
clt_dst->timestamp = virNetServerClientGetTimestamp(clt_src);
clt_dst->transport = virNetServerClientGetTransport(clt_src);
+ return 0;
}
/* Functions */
diff --git a/src/remote/remote_daemon_dispatch.c b/src/remote/remote_daemon_dispatch.c
index e62ebfb596..73a9434700 100644
--- a/src/remote/remote_daemon_dispatch.c
+++ b/src/remote/remote_daemon_dispatch.c
@@ -93,16 +93,16 @@ static virNWFilterPtr get_nonnull_nwfilter(virConnectPtr conn, remote_nonnull_nw
static virNWFilterBindingPtr get_nonnull_nwfilter_binding(virConnectPtr conn, remote_nonnull_nwfilter_binding binding);
static virDomainSnapshotPtr get_nonnull_domain_snapshot(virDomainPtr dom, remote_nonnull_domain_snapshot snapshot);
static virNodeDevicePtr get_nonnull_node_device(virConnectPtr conn, remote_nonnull_node_device dev);
-static void make_nonnull_domain(remote_nonnull_domain *dom_dst, virDomainPtr dom_src);
-static void make_nonnull_network(remote_nonnull_network *net_dst, virNetworkPtr net_src);
-static void make_nonnull_interface(remote_nonnull_interface *interface_dst, virInterfacePtr interface_src);
-static void make_nonnull_storage_pool(remote_nonnull_storage_pool *pool_dst, virStoragePoolPtr pool_src);
-static void make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr vol_src);
-static void make_nonnull_node_device(remote_nonnull_node_device *dev_dst, virNodeDevicePtr dev_src);
-static void make_nonnull_secret(remote_nonnull_secret *secret_dst, virSecretPtr secret_src);
-static void make_nonnull_nwfilter(remote_nonnull_nwfilter *net_dst, virNWFilterPtr nwfilter_src);
-static void make_nonnull_nwfilter_binding(remote_nonnull_nwfilter_binding *binding_dst, virNWFilterBindingPtr binding_src);
-static void make_nonnull_domain_snapshot(remote_nonnull_domain_snapshot *snapshot_dst, virDomainSnapshotPtr snapshot_src);
+static int make_nonnull_domain(remote_nonnull_domain *dom_dst, virDomainPtr dom_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_network(remote_nonnull_network *net_dst, virNetworkPtr net_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_interface(remote_nonnull_interface *interface_dst, virInterfacePtr interface_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_storage_pool(remote_nonnull_storage_pool *pool_dst, virStoragePoolPtr pool_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr vol_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_node_device(remote_nonnull_node_device *dev_dst, virNodeDevicePtr dev_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_secret(remote_nonnull_secret *secret_dst, virSecretPtr secret_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_nwfilter(remote_nonnull_nwfilter *net_dst, virNWFilterPtr nwfilter_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_nwfilter_binding(remote_nonnull_nwfilter_binding *binding_dst, virNWFilterBindingPtr binding_src) ATTRIBUTE_RETURN_CHECK;
+static int make_nonnull_domain_snapshot(remote_nonnull_domain_snapshot *snapshot_dst, virDomainSnapshotPtr snapshot_src) ATTRIBUTE_RETURN_CHECK;
static int
remoteSerializeDomainDiskErrors(virDomainDiskErrorPtr errors,
@@ -315,7 +315,8 @@ remoteRelayDomainEventLifecycle(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.event = event;
data.detail = detail;
@@ -335,6 +336,11 @@ remoteRelayDomainEventLifecycle(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_lifecycle_msg,
+ &data);
+ return -1;
}
static int
@@ -354,7 +360,8 @@ remoteRelayDomainEventReboot(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -370,6 +377,11 @@ remoteRelayDomainEventReboot(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_reboot_msg,
+ &data);
+ return -1;
}
@@ -392,7 +404,8 @@ remoteRelayDomainEventRTCChange(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.offset = offset;
if (callback->legacy) {
@@ -409,6 +422,11 @@ remoteRelayDomainEventRTCChange(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_rtc_change_msg,
+ &data);
+ return -1;
}
@@ -430,7 +448,8 @@ remoteRelayDomainEventWatchdog(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.action = action;
if (callback->legacy) {
@@ -447,6 +466,11 @@ remoteRelayDomainEventWatchdog(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_watchdog_msg,
+ &data);
+ return -1;
}
@@ -474,7 +498,8 @@ remoteRelayDomainEventIOError(virConnectPtr conn,
if (VIR_STRDUP(data.srcPath, srcPath) < 0 ||
VIR_STRDUP(data.devAlias, devAlias) < 0)
goto error;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.action = action;
if (callback->legacy) {
@@ -492,8 +517,8 @@ remoteRelayDomainEventIOError(virConnectPtr conn,
return 0;
error:
- VIR_FREE(data.srcPath);
- VIR_FREE(data.devAlias);
+ xdr_free((xdrproc_t)xdr_remote_domain_event_io_error_msg,
+ &data);
return -1;
}
@@ -526,7 +551,8 @@ remoteRelayDomainEventIOErrorReason(virConnectPtr conn,
goto error;
data.action = action;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -544,9 +570,8 @@ remoteRelayDomainEventIOErrorReason(virConnectPtr conn,
return 0;
error:
- VIR_FREE(data.srcPath);
- VIR_FREE(data.devAlias);
- VIR_FREE(data.reason);
+ xdr_free((xdrproc_t)xdr_remote_domain_event_io_error_reason_msg,
+ &data);
return -1;
}
@@ -600,7 +625,8 @@ remoteRelayDomainEventGraphics(virConnectPtr conn,
VIR_STRDUP(data.subject.subject_val[i].name, subject->identities[i].name) < 0)
goto error;
}
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -618,18 +644,8 @@ remoteRelayDomainEventGraphics(virConnectPtr conn,
return 0;
error:
- VIR_FREE(data.authScheme);
- VIR_FREE(data.local.node);
- VIR_FREE(data.local.service);
- VIR_FREE(data.remote.node);
- VIR_FREE(data.remote.service);
- if (data.subject.subject_val != NULL) {
- for (i = 0; i < data.subject.subject_len; i++) {
- VIR_FREE(data.subject.subject_val[i].type);
- VIR_FREE(data.subject.subject_val[i].name);
- }
- VIR_FREE(data.subject.subject_val);
- }
+ xdr_free((xdrproc_t)xdr_remote_domain_event_graphics_msg,
+ &data);
return -1;
}
@@ -657,7 +673,8 @@ remoteRelayDomainEventBlockJob(virConnectPtr conn,
return -1;
data.type = type;
data.status = status;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -673,6 +690,11 @@ remoteRelayDomainEventBlockJob(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_block_job_msg,
+ &data);
+ return -1;
}
@@ -693,7 +715,8 @@ remoteRelayDomainEventControlError(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -709,6 +732,11 @@ remoteRelayDomainEventControlError(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_control_error_msg,
+ &data);
+ return -1;
}
@@ -751,7 +779,8 @@ remoteRelayDomainEventDiskChange(virConnectPtr conn,
goto error;
data.reason = reason;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -769,8 +798,8 @@ remoteRelayDomainEventDiskChange(virConnectPtr conn,
return 0;
error:
- VIR_FREE(oldSrcPath_p);
- VIR_FREE(newSrcPath_p);
+ xdr_free((xdrproc_t)xdr_remote_domain_event_disk_change_msg,
+ &data);
return -1;
}
@@ -799,7 +828,8 @@ remoteRelayDomainEventTrayChange(virConnectPtr conn,
return -1;
data.reason = reason;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -815,6 +845,11 @@ remoteRelayDomainEventTrayChange(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_tray_change_msg,
+ &data);
+ return -1;
}
static int
@@ -835,7 +870,8 @@ remoteRelayDomainEventPMWakeup(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -851,6 +887,11 @@ remoteRelayDomainEventPMWakeup(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_pmwakeup_msg,
+ &data);
+ return -1;
}
static int
@@ -871,7 +912,8 @@ remoteRelayDomainEventPMSuspend(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -887,6 +929,11 @@ remoteRelayDomainEventPMSuspend(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_pmsuspend_msg,
+ &data);
+ return -1;
}
static int
@@ -907,7 +954,8 @@ remoteRelayDomainEventBalloonChange(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.actual = actual;
if (callback->legacy) {
@@ -924,6 +972,11 @@ remoteRelayDomainEventBalloonChange(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_balloon_change_msg,
+ &data);
+ return -1;
}
@@ -945,7 +998,8 @@ remoteRelayDomainEventPMSuspendDisk(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -961,6 +1015,11 @@ remoteRelayDomainEventPMSuspendDisk(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_pmsuspend_disk_msg,
+ &data);
+ return -1;
}
static int
@@ -985,7 +1044,8 @@ remoteRelayDomainEventDeviceRemoved(virConnectPtr conn,
if (VIR_STRDUP(data.devAlias, devAlias) < 0)
return -1;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (callback->legacy) {
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -1003,6 +1063,11 @@ remoteRelayDomainEventDeviceRemoved(virConnectPtr conn,
}
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_device_removed_msg,
+ &data);
+ return -1;
}
@@ -1031,13 +1096,19 @@ remoteRelayDomainEventBlockJob2(virConnectPtr conn,
return -1;
data.type = type;
data.status = status;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
remoteDispatchObjectEventSend(callback->client, remoteProgram,
REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB_2,
(xdrproc_t)xdr_remote_domain_event_block_job_2_msg, &data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_block_job_2_msg,
+ &data);
+ return -1;
}
@@ -1061,7 +1132,8 @@ remoteRelayDomainEventTunable(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
data.callbackID = callback->callbackID;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (virTypedParamsSerialize(params, nparams,
(virTypedParameterRemotePtr *) &data.params.params_val,
@@ -1077,6 +1149,11 @@ remoteRelayDomainEventTunable(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_callback_tunable_msg,
+ &data);
+ return -1;
}
@@ -1101,7 +1178,8 @@ remoteRelayDomainEventAgentLifecycle(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
data.callbackID = callback->callbackID;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.state = state;
data.reason = reason;
@@ -1112,6 +1190,11 @@ remoteRelayDomainEventAgentLifecycle(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_callback_agent_lifecycle_msg,
+ &data);
+ return -1;
}
@@ -1137,7 +1220,8 @@ remoteRelayDomainEventDeviceAdded(virConnectPtr conn,
if (VIR_STRDUP(data.devAlias, devAlias) < 0)
return -1;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.callbackID = callback->callbackID;
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -1146,6 +1230,11 @@ remoteRelayDomainEventDeviceAdded(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_callback_device_added_msg,
+ &data);
+ return -1;
}
@@ -1169,7 +1258,8 @@ remoteRelayDomainEventMigrationIteration(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
data.callbackID = callback->callbackID;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.iteration = iteration;
@@ -1179,6 +1269,11 @@ remoteRelayDomainEventMigrationIteration(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_callback_migration_iteration_msg,
+ &data);
+ return -1;
}
@@ -1203,7 +1298,8 @@ remoteRelayDomainEventJobCompleted(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
data.callbackID = callback->callbackID;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
if (virTypedParamsSerialize(params, nparams,
(virTypedParameterRemotePtr *) &data.params.params_val,
@@ -1218,6 +1314,11 @@ remoteRelayDomainEventJobCompleted(virConnectPtr conn,
(xdrproc_t)xdr_remote_domain_event_callback_job_completed_msg,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_callback_job_completed_msg,
+ &data);
+ return -1;
}
@@ -1243,7 +1344,8 @@ remoteRelayDomainEventDeviceRemovalFailed(virConnectPtr conn,
if (VIR_STRDUP(data.devAlias, devAlias) < 0)
return -1;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.callbackID = callback->callbackID;
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -1252,6 +1354,11 @@ remoteRelayDomainEventDeviceRemovalFailed(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_callback_device_removal_failed_msg,
+ &data);
+ return -1;
}
@@ -1287,7 +1394,8 @@ remoteRelayDomainEventMetadataChange(virConnectPtr conn,
data.nsuri = nsurip;
}
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
data.callbackID = callback->callbackID;
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -1296,6 +1404,11 @@ remoteRelayDomainEventMetadataChange(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_domain_event_callback_metadata_change_msg,
+ &data);
+ return -1;
}
@@ -1331,15 +1444,18 @@ remoteRelayDomainEventBlockThreshold(virConnectPtr conn,
}
data.threshold = threshold;
data.excess = excess;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
remoteDispatchObjectEventSend(callback->client, remoteProgram,
REMOTE_PROC_DOMAIN_EVENT_BLOCK_THRESHOLD,
(xdrproc_t)xdr_remote_domain_event_block_threshold_msg, &data);
return 0;
+
error:
- VIR_FREE(data.dev);
+ xdr_free((xdrproc_t)xdr_remote_domain_event_block_threshold_msg,
+ &data);
return -1;
}
@@ -1393,7 +1509,8 @@ remoteRelayNetworkEventLifecycle(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_network(&data.net, net);
+ if (make_nonnull_network(&data.net, net) < 0)
+ goto error;
data.callbackID = callback->callbackID;
data.event = event;
data.detail = detail;
@@ -1403,6 +1520,11 @@ remoteRelayNetworkEventLifecycle(virConnectPtr conn,
(xdrproc_t)xdr_remote_network_event_lifecycle_msg, &data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_network_event_lifecycle_msg,
+ &data);
+ return -1;
}
static virConnectNetworkEventGenericCallback networkEventCallbacks[] = {
@@ -1430,7 +1552,8 @@ remoteRelayStoragePoolEventLifecycle(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_storage_pool(&data.pool, pool);
+ if (make_nonnull_storage_pool(&data.pool, pool) < 0)
+ goto error;
data.callbackID = callback->callbackID;
data.event = event;
data.detail = detail;
@@ -1441,6 +1564,11 @@ remoteRelayStoragePoolEventLifecycle(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_storage_pool_event_lifecycle_msg,
+ &data);
+ return -1;
}
static int
@@ -1460,7 +1588,8 @@ remoteRelayStoragePoolEventRefresh(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_storage_pool(&data.pool, pool);
+ if (make_nonnull_storage_pool(&data.pool, pool) < 0)
+ goto error;
data.callbackID = callback->callbackID;
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -1469,6 +1598,11 @@ remoteRelayStoragePoolEventRefresh(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_storage_pool_event_refresh_msg,
+ &data);
+ return -1;
}
static virConnectStoragePoolEventGenericCallback storageEventCallbacks[] = {
@@ -1497,7 +1631,8 @@ remoteRelayNodeDeviceEventLifecycle(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_node_device(&data.dev, dev);
+ if (make_nonnull_node_device(&data.dev, dev) < 0)
+ goto error;
data.callbackID = callback->callbackID;
data.event = event;
data.detail = detail;
@@ -1508,6 +1643,11 @@ remoteRelayNodeDeviceEventLifecycle(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_node_device_event_lifecycle_msg,
+ &data);
+ return -1;
}
static int
@@ -1527,7 +1667,8 @@ remoteRelayNodeDeviceEventUpdate(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_node_device(&data.dev, dev);
+ if (make_nonnull_node_device(&data.dev, dev) < 0)
+ goto error;
data.callbackID = callback->callbackID;
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -1536,6 +1677,11 @@ remoteRelayNodeDeviceEventUpdate(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_node_device_event_update_msg,
+ &data);
+ return -1;
}
static virConnectNodeDeviceEventGenericCallback nodeDeviceEventCallbacks[] = {
@@ -1564,7 +1710,8 @@ remoteRelaySecretEventLifecycle(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_secret(&data.secret, secret);
+ if (make_nonnull_secret(&data.secret, secret) < 0)
+ goto error;
data.callbackID = callback->callbackID;
data.event = event;
data.detail = detail;
@@ -1575,6 +1722,11 @@ remoteRelaySecretEventLifecycle(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_secret_event_lifecycle_msg,
+ &data);
+ return -1;
}
static int
@@ -1594,7 +1746,8 @@ remoteRelaySecretEventValueChanged(virConnectPtr conn,
/* build return data */
memset(&data, 0, sizeof(data));
- make_nonnull_secret(&data.secret, secret);
+ if (make_nonnull_secret(&data.secret, secret) < 0)
+ goto error;
data.callbackID = callback->callbackID;
remoteDispatchObjectEventSend(callback->client, remoteProgram,
@@ -1603,6 +1756,11 @@ remoteRelaySecretEventValueChanged(virConnectPtr conn,
&data);
return 0;
+
+ error:
+ xdr_free((xdrproc_t)xdr_remote_secret_event_value_changed_msg,
+ &data);
+ return -1;
}
static virConnectSecretEventGenericCallback secretEventCallbacks[] = {
@@ -1645,7 +1803,8 @@ remoteRelayDomainQemuMonitorEvent(virConnectPtr conn,
VIR_STRDUP(*details_p, details) < 0))
goto error;
data.details = details_p;
- make_nonnull_domain(&data.dom, dom);
+ if (make_nonnull_domain(&data.dom, dom) < 0)
+ goto error;
remoteDispatchObjectEventSend(callback->client, qemuProgram,
QEMU_PROC_DOMAIN_MONITOR_EVENT,
@@ -1654,8 +1813,9 @@ remoteRelayDomainQemuMonitorEvent(virConnectPtr conn,
return;
error:
- VIR_FREE(data.event);
- VIR_FREE(details_p);
+ xdr_free((xdrproc_t)xdr_qemu_domain_monitor_event_msg,
+ &data);
+ return;
}
static
@@ -4649,7 +4809,8 @@ remoteDispatchDomainMigrateFinish3(virNetServerPtr server ATTRIBUTE_UNUSED,
args->cancelled)))
goto cleanup;
- make_nonnull_domain(&ret->dom, dom);
+ if (make_nonnull_domain(&ret->dom, dom) < 0)
+ goto cleanup;
/* remoteDispatchClientRequest will free cookie
*/
@@ -5585,7 +5746,8 @@ remoteDispatchDomainMigrateFinish3Params(virNetServerPtr server ATTRIBUTE_UNUSED
if (!dom)
goto cleanup;
- make_nonnull_domain(&ret->dom, dom);
+ if (make_nonnull_domain(&ret->dom, dom) < 0)
+ goto cleanup;
ret->cookie_out.cookie_out_len = cookieoutlen;
ret->cookie_out.cookie_out_val = cookieout;
@@ -5740,7 +5902,9 @@ remoteDispatchDomainCreateXMLWithFiles(virNetServerPtr server ATTRIBUTE_UNUSED,
args->flags)) == NULL)
goto cleanup;
- make_nonnull_domain(&ret->dom, dom);
+ if (make_nonnull_domain(&ret->dom, dom) < 0)
+ goto cleanup;
+
rv = 0;
cleanup:
@@ -5790,7 +5954,9 @@ static int remoteDispatchDomainCreateWithFiles(virNetServerPtr server ATTRIBUTE_
args->flags) < 0)
goto cleanup;
- make_nonnull_domain(&ret->dom, dom);
+ if (make_nonnull_domain(&ret->dom, dom) < 0)
+ goto cleanup;
+
rv = 0;
cleanup:
@@ -6686,7 +6852,8 @@ remoteDispatchConnectGetAllDomainStats(virNetServerPtr server ATTRIBUTE_UNUSED,
for (i = 0; i < nrecords; i++) {
remote_domain_stats_record *dst = ret->retStats.retStats_val + i;
- make_nonnull_domain(&dst->dom, retStats[i]->dom);
+ if (make_nonnull_domain(&dst->dom, retStats[i]->dom) < 0)
+ goto cleanup;
if (virTypedParamsSerialize(retStats[i]->params,
retStats[i]->nparams,
@@ -7106,77 +7273,113 @@ get_nonnull_node_device(virConnectPtr conn, remote_nonnull_node_device dev)
}
/* Make remote_nonnull_domain and remote_nonnull_network. */
-static void
+static int
make_nonnull_domain(remote_nonnull_domain *dom_dst, virDomainPtr dom_src)
{
dom_dst->id = dom_src->id;
- ignore_value(VIR_STRDUP_QUIET(dom_dst->name, dom_src->name));
+ if (VIR_STRDUP(dom_dst->name, dom_src->name) < 0)
+ return -1;
memcpy(dom_dst->uuid, dom_src->uuid, VIR_UUID_BUFLEN);
+ return 0;
}
-static void
+static int
make_nonnull_network(remote_nonnull_network *net_dst, virNetworkPtr net_src)
{
- ignore_value(VIR_STRDUP_QUIET(net_dst->name, net_src->name));
+ if (VIR_STRDUP(net_dst->name, net_src->name) < 0)
+ return -1;
memcpy(net_dst->uuid, net_src->uuid, VIR_UUID_BUFLEN);
+ return 0;
}
-static void
+static int
make_nonnull_interface(remote_nonnull_interface *interface_dst,
virInterfacePtr interface_src)
{
- ignore_value(VIR_STRDUP_QUIET(interface_dst->name, interface_src->name));
- ignore_value(VIR_STRDUP_QUIET(interface_dst->mac, interface_src->mac));
+ if (VIR_STRDUP(interface_dst->name, interface_src->name) < 0)
+ return -1;
+ if (VIR_STRDUP(interface_dst->mac, interface_src->mac) < 0) {
+ VIR_FREE(interface_dst->name);
+ return -1;
+ }
+ return 0;
}
-static void
+static int
make_nonnull_storage_pool(remote_nonnull_storage_pool *pool_dst, virStoragePoolPtr pool_src)
{
- ignore_value(VIR_STRDUP_QUIET(pool_dst->name, pool_src->name));
+ if (VIR_STRDUP(pool_dst->name, pool_src->name) < 0)
+ return -1;
memcpy(pool_dst->uuid, pool_src->uuid, VIR_UUID_BUFLEN);
+ return 0;
}
-static void
+static int
make_nonnull_storage_vol(remote_nonnull_storage_vol *vol_dst, virStorageVolPtr vol_src)
{
- ignore_value(VIR_STRDUP_QUIET(vol_dst->pool, vol_src->pool));
- ignore_value(VIR_STRDUP_QUIET(vol_dst->name, vol_src->name));
- ignore_value(VIR_STRDUP_QUIET(vol_dst->key, vol_src->key));
+ if (VIR_STRDUP(vol_dst->pool, vol_src->pool) < 0)
+ return -1;
+ if (VIR_STRDUP(vol_dst->name, vol_src->name) < 0) {
+ VIR_FREE(vol_dst->pool);
+ return -1;
+ }
+ if (VIR_STRDUP(vol_dst->key, vol_src->key) < 0) {
+ VIR_FREE(vol_dst->pool);
+ VIR_FREE(vol_dst->name);
+ return -1;
+ }
+ return 0;
}
-static void
+static int
make_nonnull_node_device(remote_nonnull_node_device *dev_dst, virNodeDevicePtr dev_src)
{
- ignore_value(VIR_STRDUP_QUIET(dev_dst->name, dev_src->name));
+ if (VIR_STRDUP(dev_dst->name, dev_src->name) < 0)
+ return -1;
+ return 0;
}
-static void
+static int
make_nonnull_secret(remote_nonnull_secret *secret_dst, virSecretPtr secret_src)
{
memcpy(secret_dst->uuid, secret_src->uuid, VIR_UUID_BUFLEN);
secret_dst->usageType = secret_src->usageType;
- ignore_value(VIR_STRDUP_QUIET(secret_dst->usageID, secret_src->usageID));
+ if (VIR_STRDUP(secret_dst->usageID, secret_src->usageID) < 0)
+ return -1;
+ return 0;
}
-static void
+static int
make_nonnull_nwfilter(remote_nonnull_nwfilter *nwfilter_dst, virNWFilterPtr nwfilter_src)
{
- ignore_value(VIR_STRDUP_QUIET(nwfilter_dst->name, nwfilter_src->name));
+ if (VIR_STRDUP(nwfilter_dst->name, nwfilter_src->name) < 0)
+ return -1;
memcpy(nwfilter_dst->uuid, nwfilter_src->uuid, VIR_UUID_BUFLEN);
+ return 0;
}
-static void
+static int
make_nonnull_nwfilter_binding(remote_nonnull_nwfilter_binding *binding_dst, virNWFilterBindingPtr binding_src)
{
- ignore_value(VIR_STRDUP_QUIET(binding_dst->portdev, binding_src->portdev));
- ignore_value(VIR_STRDUP_QUIET(binding_dst->filtername, binding_src->filtername));
+ if (VIR_STRDUP(binding_dst->portdev, binding_src->portdev) < 0)
+ return -1;
+ if (VIR_STRDUP(binding_dst->filtername, binding_src->filtername) < 0) {
+ VIR_FREE(binding_dst->portdev);
+ return -1;
+ }
+ return 0;
}
-static void
+static int
make_nonnull_domain_snapshot(remote_nonnull_domain_snapshot *snapshot_dst, virDomainSnapshotPtr snapshot_src)
{
- ignore_value(VIR_STRDUP_QUIET(snapshot_dst->name, snapshot_src->name));
- make_nonnull_domain(&snapshot_dst->dom, snapshot_src->domain);
+ if (VIR_STRDUP(snapshot_dst->name, snapshot_src->name) < 0)
+ return -1;
+ if (make_nonnull_domain(&snapshot_dst->dom, snapshot_src->domain) < 0) {
+ VIR_FREE(snapshot_dst->name);
+ return -1;
+ }
+ return 0;
}
static int
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
index a8b9f5aeca..ce4db5d7b7 100755
--- a/src/rpc/gendispatch.pl
+++ b/src/rpc/gendispatch.pl
@@ -786,12 +786,12 @@ elsif ($mode eq "server") {
if ($call->{ProcName} eq "DomainCreateWithFlags") {
# SPECIAL: virDomainCreateWithFlags updates the given
# domain object instead of returning a new one
- push(@ret_list, "make_nonnull_$1(&ret->$2, $2);");
+ push(@ret_list, "if (make_nonnull_$1(&ret->$2, $2) < 0)\n goto cleanup;\n");
$single_ret_var = undef;
$single_ret_by_ref = 1;
} else {
push(@vars_list, "vir${type_name}Ptr $2 = NULL");
- push(@ret_list, "make_nonnull_$1(&ret->$2, $2);");
+ push(@ret_list, "if (make_nonnull_$1(&ret->$2, $2) < 0)\n goto cleanup;\n");
push(@free_list,
" virObjectUnref($2);");
$single_ret_var = $2;
@@ -907,11 +907,11 @@ elsif ($mode eq "server") {
if ($1 eq "client") {
push(@vars_list, "virNetServer${type_name}Ptr $2 = NULL");
- push(@ret_list, "make_nonnull_$1(&ret->$2, $2);");
- push(@ret_list, "make_nonnull_server(&ret->$2.srv, srv);");
+ push(@ret_list, "if (make_nonnull_$1(&ret->$2, $2) < 0)\n goto cleanup;\n");
+ push(@ret_list, "if (make_nonnull_server(&ret->$2.srv, srv) < 0)\n goto cleanup;\n");
} else {
push(@vars_list, "virNet${type_name}Ptr $2 = NULL");
- push(@ret_list, "make_nonnull_$1(&ret->$2, $2);");
+ push(@ret_list, "if (make_nonnull_$1(&ret->$2, $2) < 0)\n goto cleanup;\n");
}
push(@free_list,
@@ -1175,12 +1175,15 @@ elsif ($mode eq "server") {
print " ret->$single_ret_list_name.${single_ret_list_name}_len = nresults;\n";
if ($modern_ret_is_nested) {
print " for (i = 0; i < nresults; i++) {\n";
- print " make_nonnull_$modern_ret_struct_name(ret->$single_ret_list_name.${single_ret_list_name}_val + i, result[i]);\n";
- print " make_nonnull_$modern_ret_nested_struct_name(&ret->$single_ret_list_name.${single_ret_list_name}_val[i].srv, srv);\n";
+ print " if (make_nonnull_$modern_ret_struct_name(ret->$single_ret_list_name.${single_ret_list_name}_val + i, result[i]) < 0)\n";
+ print " goto cleanup;\n";
+ print " if (make_nonnull_$modern_ret_nested_struct_name(&ret->$single_ret_list_name.${single_ret_list_name}_val[i].srv, srv) < 0)\n";
+ print " goto cleanup;\n";
print " }\n";
} else {
print " for (i = 0; i < nresults; i++)\n";
- print " make_nonnull_$modern_ret_struct_name(ret->$single_ret_list_name.${single_ret_list_name}_val + i, result[i]);\n";
+ print " if (make_nonnull_$modern_ret_struct_name(ret->$single_ret_list_name.${single_ret_list_name}_val + i, result[i]) < 0)\n";
+ print " goto cleanup;\n";
}
print " } else {\n";
print " ret->$single_ret_list_name.${single_ret_list_name}_len = 0;\n";
--
2.19.2
2
1