[libvirt] [PATCH 1/2] Only parse custom vhost path for virtio interfaces
John Ferlan
jferlan at redhat.com
Thu Feb 5 19:20:48 UTC 2015
On 02/05/2015 07:52 AM, Ján Tomko wrote:
> It is not used for other network interface models.
A little light here... Something along the lines of only supporting
backend vhost attribute for virtio adapters and quietly dropping it for
any other definition...
>
> https://bugzilla.redhat.com/show_bug.cgi?id=1147195
> ---
> src/conf/domain_conf.c | 6 +++-
> .../qemuxml2argv-tap-vhost-incorrect.xml | 39 ++++++++++++++++++++++
> .../qemuxml2xmlout-tap-vhost-incorrect.xml | 38 +++++++++++++++++++++
> tests/qemuxml2xmltest.c | 1 +
> 4 files changed, 83 insertions(+), 1 deletion(-)
> create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-tap-vhost-incorrect.xml
> create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-tap-vhost-incorrect.xml
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 4251b13..da3764f 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -7369,6 +7369,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
> char *vhostuser_path = NULL;
> char *vhostuser_type = NULL;
> char *trustGuestRxFilters = NULL;
> + char *vhost_path = NULL;
> virNWFilterHashTablePtr filterparams = NULL;
> virDomainActualNetDefPtr actual = NULL;
> xmlNodePtr oldnode = ctxt->node;
> @@ -7551,7 +7552,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
> VIR_FREE(tmp);
>
> if ((tmp = virXMLPropString(cur, "vhost")))
> - def->backend.vhost = virFileSanitizePath(tmp);
> + vhost_path = virFileSanitizePath(tmp);
> VIR_FREE(tmp);
Coverity got grumpy here - it believes "vhost" can be found twice
probably because there's other code (just above here) which fills in
vhostuser_* values, but first checks (!vhostuser_* &&...)
To keep Coverity quiet, adding a "!vhost_path &&" prior to the tmp =
does work.
Why this doesn't get flagged for def->backend.tap nor the former code
and some other allocations, I'm not quite sure.
Another option is to not use vhost_path and just do the following after
decoding def->model (prior to the if loop where you used vhost_path):
if (def->backend.vhost && STRNEQ_NULLABLE(def->model, "virtio"))
VIR_FREE(def->backend.vhost);
ACK - regardless of which method you choose.
John
> }
> }
> @@ -7992,6 +7993,8 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
> }
> def->driver.virtio.guest.ufo = val;
> }
> + def->backend.vhost = vhost_path;
> + vhost_path = NULL;
> }
>
> def->linkstate = VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DEFAULT;
> @@ -8061,6 +8064,7 @@ virDomainNetDefParseXML(virDomainXMLOptionPtr xmlopt,
> VIR_FREE(addrtype);
> VIR_FREE(trustGuestRxFilters);
> VIR_FREE(ips);
> + VIR_FREE(vhost_path);
> virNWFilterHashTableFree(filterparams);
>
> return def;
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-tap-vhost-incorrect.xml b/tests/qemuxml2argvdata/qemuxml2argv-tap-vhost-incorrect.xml
> new file mode 100644
> index 0000000..2cf312f
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-tap-vhost-incorrect.xml
> @@ -0,0 +1,39 @@
> +<domain type='qemu'>
> + <name>test</name>
> + <uuid>bba65c0e-c049-934f-b6aa-4e2c0582acdf</uuid>
> + <memory unit='KiB'>1048576</memory>
> + <currentMemory unit='KiB'>1048576</currentMemory>
> + <vcpu placement='static'>1</vcpu>
> + <os>
> + <type arch='x86_64' machine='pc-0.13'>hvm</type>
> + <boot dev='cdrom'/>
> + <boot dev='hd'/>
> + <bootmenu enable='yes'/>
> + </os>
> + <clock offset='utc'/>
> + <on_poweroff>destroy</on_poweroff>
> + <on_reboot>restart</on_reboot>
> + <on_crash>restart</on_crash>
> + <devices>
> + <emulator>/usr/bin/qemu</emulator>
> + <controller type='usb' index='0'/>
> + <controller type='virtio-serial' index='0'>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
> + </controller>
> + <controller type='ide' index='0'/>
> + <controller type='pci' index='0' model='pci-root'/>
> + <interface type='user'>
> + <mac address='52:54:00:e5:48:58'/>
> + <model type='definitely-not-virtio'/>
> + <driver name='vhost' queues='5'/>
> + <backend tap='/dev/null' vhost='/dev/zero'/>
> + </interface>
> + <serial type='pty'>
> + <target port='0'/>
> + </serial>
> + <console type='pty'>
> + <target type='serial' port='0'/>
> + </console>
> + <memballoon model='virtio'/>
> + </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-tap-vhost-incorrect.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-tap-vhost-incorrect.xml
> new file mode 100644
> index 0000000..266cbf0
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-tap-vhost-incorrect.xml
> @@ -0,0 +1,38 @@
> +<domain type='qemu'>
> + <name>test</name>
> + <uuid>bba65c0e-c049-934f-b6aa-4e2c0582acdf</uuid>
> + <memory unit='KiB'>1048576</memory>
> + <currentMemory unit='KiB'>1048576</currentMemory>
> + <vcpu placement='static'>1</vcpu>
> + <os>
> + <type arch='x86_64' machine='pc-0.13'>hvm</type>
> + <boot dev='cdrom'/>
> + <boot dev='hd'/>
> + <bootmenu enable='yes'/>
> + </os>
> + <clock offset='utc'/>
> + <on_poweroff>destroy</on_poweroff>
> + <on_reboot>restart</on_reboot>
> + <on_crash>restart</on_crash>
> + <devices>
> + <emulator>/usr/bin/qemu</emulator>
> + <controller type='usb' index='0'/>
> + <controller type='virtio-serial' index='0'>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
> + </controller>
> + <controller type='ide' index='0'/>
> + <controller type='pci' index='0' model='pci-root'/>
> + <interface type='user'>
> + <mac address='52:54:00:e5:48:58'/>
> + <model type='definitely-not-virtio'/>
> + <backend tap='/dev/null'/>
> + </interface>
> + <serial type='pty'>
> + <target port='0'/>
> + </serial>
> + <console type='pty'>
> + <target type='serial' port='0'/>
> + </console>
> + <memballoon model='virtio'/>
> + </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
> index a0a1cab..d3dfd9e 100644
> --- a/tests/qemuxml2xmltest.c
> +++ b/tests/qemuxml2xmltest.c
> @@ -417,6 +417,7 @@ mymain(void)
> DO_TEST("bios-nvram");
>
> DO_TEST("tap-vhost");
> + DO_TEST_DIFFERENT("tap-vhost-incorrect");
> DO_TEST("shmem");
> DO_TEST("smbios");
>
>
More information about the libvir-list
mailing list