14 hours agoconf: Fix leak in virNodeDeviceObjListExport master
John Ferlan [Mon, 20 Feb 2017 19:03:07 +0000]
conf: Fix leak in virNodeDeviceObjListExport

Fix a leak introduced by 4337bc57b when VIR_STRDUP'g the parent.

14 hours agoconf: Cleanup matchFCHostToSCSIHost
John Ferlan [Mon, 20 Feb 2017 18:59:36 +0000]
conf: Cleanup matchFCHostToSCSIHost

Rather than the inlined VIR_FREE's, use a cleanup: label... Fixes an
issue introduced by 03346def where @name was free'd before usage in
a virAsprintf to format scsi_host_name.

15 hours agoqemu: Fix deadlock across fork() in QEMU driver
Marc Hartmayer [Tue, 21 Feb 2017 12:11:00 +0000]
qemu: Fix deadlock across fork() in QEMU driver

The functions in virCommand() after fork() must be careful with regard
to accessing any mutexes that may have been locked by other threads in
the parent process. It is possible that another thread in the parent
process holds the lock for the virQEMUDriver while fork() is called.
This leads to a deadlock in the child process when
'virQEMUDriverGetConfig(driver)' is called and therefore the handshake
never completes between the child and the parent process. Ultimately
the virDomainObjectPtr will never be unlocked.

It gets much worse if the other thread of the parent process, that
holds the lock for the virQEMUDriver, tries to lock the already locked
virDomainObject. This leads to a completely unresponsive libvirtd.

It's possible to reproduce this case with calling 'virsh start XXX'
and 'virsh managedsave XXX' in a tight loop for multiple domains.

This commit fixes the deadlock in the same way as it is described in
commit 61b52d2e3813cc8c9ff3ab67f232bd0c65f7318d.

Signed-off-by: Marc Hartmayer <>
Reviewed-by: Boris Fiuczynski <>

15 hours agonews: Mention specific vCPU hotplug API
Peter Krempa [Fri, 10 Feb 2017 17:03:52 +0000]
news: Mention specific vCPU hotplug API

15 hours agotest: qemuhotplugtest: Add testing of individual vcpu hotplug
Peter Krempa [Fri, 10 Feb 2017 16:14:22 +0000]
test: qemuhotplugtest: Add testing of individual vcpu hotplug

Test that the vcpu entity selection code works properly

15 hours agoqemu: Implement individual vcpu hotplug API
Peter Krempa [Tue, 21 Jun 2016 15:17:41 +0000]
qemu: Implement individual vcpu hotplug API

Add code that validates user's selection of cores and then uses the
existing code to plug in the vCPU.

16 hours agovirsh: Implement command for virDomainSetVcpu called setvcpu
Peter Krempa [Tue, 21 Jun 2016 08:55:30 +0000]
virsh: Implement command for virDomainSetVcpu called setvcpu

Add a simple virsh command handler which makes use of the new API.

16 hours agolib: Add API for specific vCPU hot(un)plug
Peter Krempa [Tue, 21 Jun 2016 08:44:51 +0000]
lib: Add API for specific vCPU hot(un)plug

Similarly to domainSetGuestVcpus this commit adds API which allows to
modify state of individual vcpus rather than just setting the count.

This allows to enable CPUs in specific guest NUMA nodes to achieve any
necessary configuration.

17 hours agoqemu: Fix build breaker after incomplete merge
Martin Kletzander [Tue, 21 Feb 2017 13:17:10 +0000]
qemu: Fix build breaker after incomplete merge

Signed-off-by: Martin Kletzander <>

18 hours agoqemu: Forbid slashes in shmem name
Martin Kletzander [Wed, 1 Feb 2017 16:14:00 +0000]
qemu: Forbid slashes in shmem name

With that users could access files outside /dev/shm.  That itself
isn't a security problem, but might cause some errors we want to
avoid.  So let's forbid slashes as we do with domain and volume names
and also mention that in the schema.


Signed-off-by: Martin Kletzander <>

21 hours agostorage: Turn storage backends into static modules
Peter Krempa [Thu, 19 Jan 2017 14:14:20 +0000]
storage: Turn storage backends into static modules

Compile the storage driver into modules rather than by compiling all
files together. All modules are still linked together statically.

21 hours agostorage: backend: Refactor registration of the backend drivers
Peter Krempa [Fri, 13 Jan 2017 15:50:11 +0000]
storage: backend: Refactor registration of the backend drivers

Add APIs that allow to dynamically register driver backends so that the
list of available drivers does not need to be known during compile time.

This will allow us to modularize the storage driver on runtime.

21 hours agodaemon: Refactor connection driver module loading
Peter Krempa [Thu, 26 Jan 2017 13:57:41 +0000]
daemon: Refactor connection driver module loading

Pass the registration function name to virDriverLoadModule so that we
can later call specific functions if necessary (e.g. for testing
purposes). This gets rid of the rather ugly automatic name generator and
unifies the code to load/initialize the modules.

It's also clear which registration function gets called.

22 hours agodriver: Split/refactor driver module loading
Peter Krempa [Wed, 18 Jan 2017 15:44:20 +0000]
driver: Split/refactor driver module loading

Split the convoluted driver loader function into simpler parts which
will potentially allow reuse.

23 hours agotests: drivermodule: Drop unused macro arguments
Peter Krempa [Wed, 18 Jan 2017 12:19:59 +0000]
tests: drivermodule: Drop unused macro arguments

Refactors of the test resulted into the second argument of the 'TEST'
macro to be unused. Drop them.

23 hours agotests: storagepoolxml2xml: Remove compile conditionals
Peter Krempa [Fri, 27 Jan 2017 16:02:19 +0000]
tests: storagepoolxml2xml: Remove compile conditionals

The XML2XML test should work properly even if the storage backend is
disabled, since it does not use it.

23 hours agoconfigure: Fix configure output for RBD storage backend
Peter Krempa [Fri, 27 Jan 2017 16:46:32 +0000]
configure: Fix configure output for RBD storage backend

We'd print status for the 'dir' backend instead of the correct one.

35 hours agoFormat printf format specifier used with niothreadids
Daniel P. Berrange [Mon, 20 Feb 2017 18:24:06 +0000]
Format printf format specifier used with niothreadids

The niothreadids struct field is size_t, so must use %zu not %lu
with printf. While they're identical on some platforms, on others
they are different, causing warnings

conf/domain_conf.c: In function 'virDomainDefCheckABIStabilityFlags':
conf/domain_conf.c:19575:26: error: format '%lu' expects argument of type 'long unsigned int', but argument 7 has type 'size_t {aka unsigned int}' [-Werror=format=]
                        _("Target domain iothreads count %lu does not "

conf/domain_conf.c: In function 'virDomainDefFormatInternal':
conf/domain_conf.c:23915:46: error: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'size_t {aka unsigned int}' [-Werror=format=]
         virBufferAsprintf(buf, "<iothreads>%lu</iothreads>\n",

Signed-off-by: Daniel P. Berrange <>

36 hours agoqemu_driver: move iothread duplicate check into one place
Pavel Hrdina [Mon, 13 Feb 2017 14:34:16 +0000]
qemu_driver: move iothread duplicate check into one place

Signed-off-by: Pavel Hrdina <>

36 hours agoqemu_driver: check whether iothread is used by controller
Pavel Hrdina [Sun, 12 Feb 2017 16:58:05 +0000]
qemu_driver: check whether iothread is used by controller

This follows the same check for disk, because we cannot remove iothread
if it's used by disk or by controller.  It could lead to crashing QEMU.

Signed-off-by: Pavel Hrdina <>

36 hours agoqemu_driver: move iothread existence check into one place
Pavel Hrdina [Sun, 12 Feb 2017 18:13:47 +0000]
qemu_driver: move iothread existence check into one place

Signed-off-by: Pavel Hrdina <>

36 hours agoqemu_driver: always check whether iothread is used by disk or not
Pavel Hrdina [Sun, 12 Feb 2017 16:49:21 +0000]
qemu_driver: always check whether iothread is used by disk or not

If virDomainDelIOThread API was called with VIR_DOMAIN_AFFECT_LIVE
and VIR_DOMAIN_AFFECT_CONFIG and both XML were already a different
it could result in removing iothread from config XML even if there
was a disk using that iothread.

Signed-off-by: Pavel Hrdina <>

36 hours agoconf: move iothread XML validation from qemu_command
Pavel Hrdina [Sun, 12 Feb 2017 14:05:53 +0000]
conf: move iothread XML validation from qemu_command

This will ensure that IOThreads are properly validated while
a domain is defined.

Signed-off-by: Pavel Hrdina <>

36 hours agoqemu_process: remove unnecessary iothread check
Pavel Hrdina [Mon, 20 Feb 2017 17:05:18 +0000]
qemu_process: remove unnecessary iothread check

The situation covered by the removed code will not ever happen.
This code is called only while starting a new QEMU process where
the capabilities where already checked and while attaching to
existing QEMU process where we don't even detect the iothreads.

Signed-off-by: Pavel Hrdina <>

36 hours agoqemu_process: move capabilities check for iothreads
Pavel Hrdina [Sun, 12 Feb 2017 03:14:32 +0000]
qemu_process: move capabilities check for iothreads

Signed-off-by: Pavel Hrdina <>

36 hours agoqemu_driver: check invalid iothread_id before we do anything else
Pavel Hrdina [Sun, 12 Feb 2017 01:53:38 +0000]
qemu_driver: check invalid iothread_id before we do anything else

Signed-off-by: Pavel Hrdina <>

36 hours agoconf: display all iothread ids in the XML if one of them is not generated
Pavel Hrdina [Mon, 20 Feb 2017 17:03:08 +0000]
conf: display all iothread ids in the XML if one of them is not generated

Signed-off-by: Pavel Hrdina <>

37 hours agoconf: move iothread parse code into its own function
Pavel Hrdina [Mon, 20 Feb 2017 09:26:07 +0000]
conf: move iothread parse code into its own function

Signed-off-by: Pavel Hrdina <>

37 hours agoconf: remove redundant iothreads variable
Pavel Hrdina [Fri, 10 Feb 2017 23:20:34 +0000]
conf: remove redundant iothreads variable

Signed-off-by: Pavel Hrdina <>

37 hours agoconf: fix indentation
Pavel Hrdina [Fri, 10 Feb 2017 15:13:32 +0000]
conf: fix indentation

Signed-off-by: Pavel Hrdina <>

40 hours agoDisallow inclusion of files from src/conf into src/utils
Peter Krempa [Mon, 20 Feb 2017 13:54:12 +0000]
Disallow inclusion of files from src/conf into src/utils

The utils code should stay separated from other code (except for very
well justified cases). Unfortunately commit 272769beccd7479c75e700a6cb
made it trivial to break the separation (and not get slapped by the
syntax-check rule) by adding -I src/conf to the CFLAGS for utils.

Remove this shortcut and except the two offenders from the syntax check
so that the codebase can be kept separated.

40 hours agonode_device: Check return value for udev_new()
Marc Hartmayer [Fri, 10 Feb 2017 09:44:44 +0000]
node_device: Check return value for udev_new()

The comment was actually wrong as
mentions that on failure NULL is returned.  Also the same return value
is checked in src/interface/interface_backend_udev.c already.

Signed-off-by: Marc Hartmayer <>

42 hours agotests: add QEMU 2.9.0 caps data
Pavel Hrdina [Sun, 19 Feb 2017 22:47:21 +0000]
tests: add QEMU 2.9.0 caps data

QEMU 2.9.0 is not released yet but it's close to its release and
we need this data to implement new features that will be in
that release.

Signed-off-by: Pavel Hrdina <>

42 hours agotests: update QEMU 2.8.0 caps data
Pavel Hrdina [Sun, 19 Feb 2017 22:45:22 +0000]
tests: update QEMU 2.8.0 caps data

The old data was generated from not released QEMU.

Signed-off-by: Pavel Hrdina <>

44 hours agoqemu: Allow @rendernode for virgl domains
Michal Privoznik [Thu, 9 Feb 2017 16:53:53 +0000]
qemu: Allow @rendernode for virgl domains

When enabling virgl, qemu opens /dev/dri/render*. So far, we are
not allowing that in devices CGroup nor creating the file in
domain's namespace and thus requiring users to set the paths in
qemu.conf. This, however, is suboptimal as it allows access to
ALL qemu processes even those which don't have virgl configured.
Now that we have a way to specify render node that qemu will use
we can be more cautious and enable just that.

Signed-off-by: Michal Privoznik <>

47 hours agonews: add entries for recent nodedev driver improvements
Michal Privoznik [Fri, 17 Feb 2017 15:52:44 +0000]
news: add entries for recent nodedev driver improvements

Signed-off-by: Michal Privoznik <>

2 days agoqemuDomainGetHostdevPath: Report /dev/vfio/vfio less frequently
Michal Privoznik [Thu, 9 Feb 2017 13:14:09 +0000]
qemuDomainGetHostdevPath: Report /dev/vfio/vfio less frequently

So far, qemuDomainGetHostdevPath has no knowledge of the reasong
it is called and thus reports /dev/vfio/vfio for every VFIO
backed device. This is suboptimal, as we want it to:

a) report /dev/vfio/vfio on every addition or domain startup
b) report /dev/vfio/vfio only on last VFIO device being unplugged

If a domain is being stopped then namespace and CGroup die with
it so no need to worry about that. I mean, even when a domain
that's exiting has more than one VFIO devices assigned to it,
this function does not clean /dev/vfio/vfio in CGroup nor in the
namespace. But that doesn't matter.

Signed-off-by: Michal Privoznik <>
Reviewed-by: Marc-André Lureau <>

2 days agoqemuDomainGetHostdevPath: Create /dev/vfio/vfio iff needed
Michal Privoznik [Wed, 8 Feb 2017 13:23:30 +0000]
qemuDomainGetHostdevPath: Create /dev/vfio/vfio iff needed

So far, we are allowing /dev/vfio/vfio in the devices cgroup
unconditionally (and creating it in the namespace too). Even if
domain has no hostdev assignment configured. This is potential
security hole. Therefore, when starting the domain (or
hotplugging a hostdev) create & allow /dev/vfio/vfio too (if

Signed-off-by: Michal Privoznik <>
Reviewed-by: Marc-André Lureau <>

2 days agoqemuSetupHostdevCgroup: Use qemuDomainGetHostdevPath
Michal Privoznik [Thu, 9 Feb 2017 10:01:29 +0000]
qemuSetupHostdevCgroup: Use qemuDomainGetHostdevPath

Since these two functions are nearly identical (with
qemuSetupHostdevCgroup actually calling virCgroupAllowDevicePath)
we can have one function call the other and thus de-duplicate
some code.

Signed-off-by: Michal Privoznik <>
Reviewed-by: Marc-André Lureau <>

2 days agoqemu_cgroup: Kill qemuSetupHostSCSIVHostDeviceCgroup
Michal Privoznik [Thu, 9 Feb 2017 09:30:23 +0000]
qemu_cgroup: Kill qemuSetupHostSCSIVHostDeviceCgroup

There's no need for this function. Currently it is passed as a
callback to virSCSIVHostDeviceFileIterate(). However, SCSI host
devices have just one file path. Therefore we can mimic approach
used in qemuDomainGetHostdevPath() to get path and call
virCgroupAllowDevicePath() directly.

Signed-off-by: Michal Privoznik <>
Reviewed-by: Marc-André Lureau <>

2 days agoqemu_cgroup: Kill qemuSetupHostSCSIDeviceCgroup
Michal Privoznik [Thu, 9 Feb 2017 09:25:28 +0000]
qemu_cgroup: Kill qemuSetupHostSCSIDeviceCgroup

There's no need for this function. Currently it is passed as a
callback to virSCSIDeviceFileIterate(). However, SCSI devices
have just one file path. Therefore we can mimic approach used in
qemuDomainGetHostdevPath() to get path and call
virCgroupAllowDevicePath() directly.

Signed-off-by: Michal Privoznik <>
Reviewed-by: Marc-André Lureau <>

2 days agoqemu_cgroup: Kill qemuSetupHostUSBDeviceCgroup
Michal Privoznik [Thu, 9 Feb 2017 09:16:12 +0000]
qemu_cgroup: Kill qemuSetupHostUSBDeviceCgroup

There's no need for this function. Currently it is passed as a
callback to virUSBDeviceFileIterate(). However, USB devices have
just one file path. Therefore we can mimic approach used in
qemuDomainGetHostdevPath() to get path and call
virCgroupAllowDevicePath() directly.

Signed-off-by: Michal Privoznik <>
Reviewed-by: Marc-André Lureau <>

2 days agoutil: virvhba: fix typo that breaks build on non-linux systems
Pavel Hrdina [Sun, 19 Feb 2017 14:47:27 +0000]
util: virvhba: fix typo that breaks build on non-linux systems

Signed-off-by: Pavel Hrdina <>

2 days agotests: Add createVHBAByNodeDevice-parent-fabric-wwn to fchosttest
John Ferlan [Tue, 24 Jan 2017 18:53:08 +0000]
tests: Add createVHBAByNodeDevice-parent-fabric-wwn to fchosttest

Add a test that allows providing the parent fabric_wwn in the input XML
in order to create the vHBA.

This also fixes a mixed setting of the fabric_wwn field from the read
test driver XML strings.

2 days agotests: Add createVHBAByNodeDevice-parent-wwn to fchosttest
John Ferlan [Tue, 24 Jan 2017 18:49:35 +0000]
tests: Add createVHBAByNodeDevice-parent-wwn to fchosttest

Add a test that allows providing the parent wwnn/wwpn in the input XML
in order to create the vHBA.

2 days agotests: Add createVHBAByNodeDevice-no-parent to fchosttest
John Ferlan [Tue, 24 Jan 2017 18:45:48 +0000]
tests: Add createVHBAByNodeDevice-no-parent to fchosttest

Add a test that allows not providing a parent in the input XML, but still
being able to create finding a VPORT capable NPIV HBA.

2 days agonodedev: Rework virNodeDeviceGetParentHost
John Ferlan [Tue, 24 Jan 2017 17:21:26 +0000]
nodedev: Rework virNodeDeviceGetParentHost

Rework the code to perform the various searches by parent, parent_wwnn/
parent_wwpn, parent_fabric_wwn, or vport capable in order to return the
'parent_host' number that is vHBA capable.

The former virNodeDeviceGetParentHost is renamed to add the ByParent
on it fixes an issue where if no parent was supplied in the XML to
create the vHBA, then virNodeDeviceFindByName was called with a NULL
second parameter which had bad results.

The reworked code will make the various calls to fetch the NPIV host
by the passed parameter options or if none are provided find a vport
capable NPIV HBA to perform the create. If the call is from the delete
path, then this option won't be allowed.

Each of virNodeDeviceGetParentHostBy* functions is now static, so
remove them external definitions.

A secondary benefit of this is the test_driver now can make use of
the new API to add some new tests to test the various creation options.

2 days agonodedev: Keep the node device lock longer in nodeDeviceDestroy
John Ferlan [Tue, 24 Jan 2017 17:26:25 +0000]
nodedev: Keep the node device lock longer in nodeDeviceDestroy

While perhaps improbable, it could be possible that after finding our
object that another thread running essentially in parallel could attempt
to delete the same vHBA.

So rather than dropping the lock right after finding the object, keep
the lock around while we drop the object lock and work on deleting the
object. Once the delete occurs we can safely drop the driver lock again.

Cleanup some of the usage of cleanup instead out for the goto label.

2 days agotests: Add new fchosttest tests for management of a vHBA
John Ferlan [Tue, 24 Jan 2017 15:49:23 +0000]
tests: Add new fchosttest tests for management of a vHBA

Add a test that will mimic creation and destruction of a vHBA
by using node device XML. The design will allow for testing the
multiple mechanisms.

The first test uses just <parent> in the node device XML. This is
somewhat similar to the existing objecteventtest, except that this
test will not provide input wwnn/wwpn's (similar to how the process
is described for the the libvirt wiki).

This requires mocking the virRandomGenerateWWN since parsing the
input XML (virNodeDevCapSCSIHostParseXML) requires either a provided
wwnn/wwpn in the XML or the ability to randomly generate the wwnn/wwpn.

2 days agoutil: Move scsi_host specific functions from virutil
John Ferlan [Mon, 23 Jan 2017 19:48:12 +0000]
util: Move scsi_host specific functions from virutil

Create a virscsihost.c and place the functions there. That removes the
last #ifdef __linux__ from virutil.c.

Take the opporunity to also change the function names and in one case
the parameters slightly

2 days agoutil: Replace virStoragePoolGetVhbaSCSIHostParent
John Ferlan [Sat, 18 Feb 2017 13:26:21 +0000]
util: Replace virStoragePoolGetVhbaSCSIHostParent

Use the new virNodeDeviceGetParentName instead. Modify the callers to
build the node device scsi_host# name string in order to call the new
function so that proper lookup occurs.

2 days agonodedev: Introduce virNodeDeviceGetParentName
John Ferlan [Sat, 18 Feb 2017 13:25:07 +0000]
nodedev: Introduce virNodeDeviceGetParentName

Create a function which takes a node device "name" entry to lookup
and returns a string containing the parent name for the node device.

2 days agoutil: Create a new virvhba module and move/rename API's
John Ferlan [Mon, 23 Jan 2017 17:54:42 +0000]
util: Create a new virvhba module and move/rename API's

Rather than have them mixed in with the virutil apis, create a separate
virvhba.c module and move the vHBA related calls into there. Soon there
will be more added.

Also modify the names of the functions and some arguments to be more
indicative of what is really happening. Adjust the callers respectively.

While I was changing fchosttest, rather than the non-descriptive names
test1...test6, rename them to match what the test is doing.

2 days agotest: Fix fchosttest resource leak
John Ferlan [Thu, 19 Jan 2017 11:37:43 +0000]
test: Fix fchosttest resource leak

Commit id '666bee3' made fabric_name optional; however, if fabric name
was present, then a leak would occur.

Signed-off-by: John Ferlan <>

2 days agotests: Create a more realistic vHBA
John Ferlan [Tue, 24 Jan 2017 01:52:24 +0000]
tests: Create a more realistic vHBA

Modify the code to react more like a real HBA -> vHBA creation.

Currently the code would just modify the input XML definition to
set the name to a wwpn and then modify the scsi_host capability
entry for the defintion to change the scsi_host# and unique_id
before adding that into the node device.

This patch does things a bit better. It finds and copies a known
existing vHBA (scsi_host11) in the node_device database and modifies
that definition to change the name to scsi_host12 and set the wwnn/
wwpn to what the input XML would expect before adding the def to the
node device object list.

Then rather than create a returned "dev" using the (poorly) mocked
name - perform the lookup using the new device name.

2 days agotest: Add helper to create vHBA for testNodeDeviceCreateXML
John Ferlan [Tue, 24 Jan 2017 12:48:36 +0000]
test: Add helper to create vHBA for testNodeDeviceCreateXML

Rather than inline the dummy creation of a vHBA to add to the node
devices - create a helper to do that work.

Also just tidy up a couple of things while at it...

2 days agotest: Add new NPIV capable HBA and a vHBA
John Ferlan [Tue, 24 Jan 2017 11:32:03 +0000]
test: Add new NPIV capable HBA and a vHBA

Predefine a second NPIV capable HBA as well as a vHBA using the first
NPIV capable HBA. This will allow for a mechanism to perform more
realistic create vHBA testing.

2 days agotests: Alter test_driver HBA name/data to be closer to reality
John Ferlan [Mon, 23 Jan 2017 20:24:59 +0000]
tests: Alter test_driver HBA name/data to be closer to reality

Alter "test-scsi-host-vport" to be "scsi_host1" to match the real
environment. This is the vport capable HBA - IOW the NPIV device.
Add more fields to scsi_host1 as well.

Alter the XML being used by the objecttest to create a vHBA in order
to match the scsi_host1 parent name and to use validateable wwnn/wwpn.
This will allow for realistic testing.

3 days agonodedev: fix build with clang
Roman Bogorodskiy [Sat, 18 Feb 2017 11:46:28 +0000]
nodedev: fix build with clang

Build fails with:

conf/node_device_conf.c:825:62: error: comparison of unsigned enum expression < 0 is always false [-Werror,-Wtautological-compare]
    if ((data->drm.type = virNodeDevDRMTypeFromString(type)) < 0) {
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
conf/node_device_conf.c:1801:59: error: comparison of unsigned enum expression < 0 is always false [-Werror,-Wtautological-compare]
        if ((type = virNodeDevDevnodeTypeFromString(tmp)) < 0) {
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
2 errors generated.

Fix by using intermediate variable to store the result similarly
to how it's done for other FromString* calls.

4 days agonodedev: Introduce new drm cap
Michal Privoznik [Fri, 17 Feb 2017 15:09:15 +0000]
nodedev: Introduce new drm cap

After 7f1bdec5fa0a0cd25 our nodedev driver is capable of
determining DRM devices (DRM stands for Direct Render Manager not
Digital rights management). There is still one bit missing
though: virConnectListAllNodeDevices() is capable of listing
either all devices or just those with specified capability. Well,
DRM capability is missing there.

Signed-off-by: Michal Privoznik <>

4 days agoqemu: add rendernode argument
Marc-André Lureau [Tue, 14 Feb 2017 21:04:13 +0000]
qemu: add rendernode argument

Add a new attribute 'rendernode' to <gl> spice element.

Give it to QEMU if qemu supports it (queued for 2.9).

Signed-off-by: Marc-André Lureau <>
Signed-off-by: Michal Privoznik <>

4 days agonodedev: add drm capability
Marc-André Lureau [Tue, 14 Feb 2017 21:04:12 +0000]
nodedev: add drm capability

Add a new 'drm' capability for Direct Rendering Manager (DRM) devices,
providing device type information.

Teach the udev backend to populate those devices.

Signed-off-by: Marc-André Lureau <>
Signed-off-by: Michal Privoznik <>

4 days agonodedev: parse <path>
Marc-André Lureau [Tue, 14 Feb 2017 21:04:11 +0000]
nodedev: parse <path>

This should have been added with c4a4603de (or 0bdefd9b04).

Signed-off-by: Marc-André Lureau <>

4 days agonodedev: add <devnode> paths
Marc-André Lureau [Tue, 14 Feb 2017 21:04:10 +0000]
nodedev: add <devnode> paths

Add new <devnode> top-level <device> element, that list the associated
/dev files. Distinguish the main /dev name from symlinks with a 'type'
attribute of value 'dev' or 'symlink'.

Update a test to check XML schema, and actually add it to the test list
since it was missing.

Signed-off-by: Marc-André Lureau <>

4 days agonodedev: fix extra space in dump
Marc-André Lureau [Tue, 14 Feb 2017 21:04:09 +0000]
nodedev: fix extra space in dump

This is a cosmetic change, shouldn't change XML parsing, and doesn't
break any test.

Signed-off-by: Marc-André Lureau <>

4 days agocputest: Fix name of the file removed by
Jiri Denemark [Thu, 16 Feb 2017 13:44:33 +0000]
cputest: Fix name of the file removed by

We want to remove the file created by

    json <<<"$data" >$fname.json

in case it was empty.

Signed-off-by: Jiri Denemark <>

5 days agonodedev: Return the parent for a virNodeDevicePtr struct
John Ferlan [Tue, 7 Feb 2017 18:04:08 +0000]
nodedev: Return the parent for a virNodeDevicePtr struct

When the 'parent' was added to the virNodeDevicePtr structure
by commit id 'e8a4ea75a' the 'parent' field was not properly filled
in when a virGetNodeDevice call was made within driver/config code.
Only the device name was ever filled in. Fetching the parent required
a second trip via virNodeDeviceGetParent into the node device lookup
code was required in order to retrieve the specific parent field (and
still the parent field was never filled in although it was free'd).

Since we have the data when we initially call virGetNodeDevice from
within driver/node_config code - let's just fill in the parent field
as well for anyone that wants it without requiring another trip into
the node_device lookup just to get the parent.

This will allow API's such as virConnectListAllNodeDevices,
virNodeDeviceLookupByName, and virNodeDeviceLookupSCSIHostByWWN
to retrieve both name and parent in the returned virNodeDevicePtr.

Signed-off-by: John Ferlan <>

5 days agolibxl: fix coverity issues introduced by 6a95edf
Joao Martins [Thu, 16 Feb 2017 16:43:05 +0000]
libxl: fix coverity issues introduced by 6a95edf

As discussed here [0][1] Coverity reported two issues:

- On libxlDomainMigrationPrepareTunnel3 @@mig will be leaked on failures
after sucessfull call libxlDomainMigrationPrepareAny hence we free it.

Setting mig = NULL after @mig is assigned plus adding libxlMigrationCookieFree
on error paths addresses the issue. In case virThreadCreate fails,
unref of args frees the cookie on dispose function (libxlMigrationDstArgsDispose)

- On libxlMigrationStartTunnel @tc would be leaked.

Fixed by correctly saving the newly allocated @tc onto @tnl such that
libxlMigrationStopTunnel would free it up.


Signed-off-by: Joao Martins <>

5 days agoqemu: Allow empty script path to <interface/>
Michal Privoznik [Thu, 2 Feb 2017 13:16:20 +0000]
qemu: Allow empty script path to <interface/>

Before 9c17d665fdc5f (v1.3.2 - I know, right?) it was possible to
have the following interface configuration:

  <interface type='ethernet'/>
    <script path=''/>

This resulted in -netdev tap,script=,.. Fortunately, qemu helped
us to get away with this as it just ignored the empty script
path. However, after the commit mentioned above it's libvirtd
who is executing the script. Unfortunately without special
case-ing empty script path.

Signed-off-by: Michal Privoznik <>

5 days agonews: add entries for libxl driver improvements and bug fixes
Jim Fehlig [Thu, 16 Feb 2017 04:15:27 +0000]
news: add entries for libxl driver improvements and bug fixes

5 days agoValidate required CPU features even for host-passthrough
Ján Tomko [Sat, 28 Jan 2017 10:32:13 +0000]
Validate required CPU features even for host-passthrough

Commit adff345 allowed enabling features with -cpu host
without ajdusting the validity checks on domain startup
and migration.

5 days agoEnsure disk names follow the disk name regex
Nitesh Konkar [Wed, 15 Feb 2017 11:14:58 +0000]
Ensure disk names follow the disk name regex

Currently disk names do not follow the
(regex) /^[fhv]d[a-z]+[0-9]*$/ completely
and hence one can assign disk names like
vd2 etc. This patch ensures that the
disk names follow the regex mentioned.
This patch also adds a testcase.

Signed-off-by: Nitesh Konkar <>

6 days agolibxl: fix potential double free in libxlDriverGetDom0MaxmemConf
Jim Fehlig [Wed, 15 Feb 2017 17:45:27 +0000]
libxl: fix potential double free in libxlDriverGetDom0MaxmemConf

Commit 4ab0c959 fixed a memory leak in libxlDriverGetDom0MaxmemConf
but introduced a potential double free of mem_tokens

*** Error in `/usr/sbin/libvirtd': double free or corruption (out):
    0x00007fffc808cfd0 ***

Avoid double free by setting mem_tokens to NULL after calling

6 days agonews: fix spelling of tunneled
Jim Fehlig [Wed, 15 Feb 2017 23:37:34 +0000]
news: fix spelling of tunneled

s/tunnelled/tunneled/ in news for the libxl tunneled migration feature.

6 days agonews: document libxl tunnelled migration support
Joao Martins [Wed, 15 Feb 2017 22:56:24 +0000]
news: document libxl tunnelled migration support

Signed-off-by: Joao Martins <>

6 days agolibxl: add tunnelled migration support
Bob Liu [Wed, 15 Feb 2017 11:17:38 +0000]
libxl: add tunnelled migration support

Tunnelled migration doesn't require any extra network connections
beside the libvirt daemon.  It's capable of strong encryption and the
default option of openstack-nova.

This patch adds the tunnelled migration(Tunnel3params) support to
libxl.  On the source side, the data flow is:

 * libxlDoMigrateSend() -> pipe libxlTunnel3MigrationFunc() polls pipe
 * out and then write to dest stream.

While on the destination side:
 * Stream -> pipe -> 'recvfd of libxlDomainStartRestore'

The usage is the same as p2p migration, execpt adding one extra
'--tunnelled' to the libvirt p2p migration command.

Signed-off-by: Bob Liu <>
Signed-off-by: Joao Martins <>

6 days agolibxl: refactor libxlDomainMigrationPrepare
Joao Martins [Wed, 15 Feb 2017 11:17:37 +0000]
libxl: refactor libxlDomainMigrationPrepare

The newly introduced function libxlDomainMigrationPrepareAny
will be shared between P2P and tunnelled variations.

Signed-off-by: Joao Martins <>

6 days agoqemu_conf: Properly check for retval of qemuDomainNamespaceAvailable
Michal Privoznik [Wed, 15 Feb 2017 14:40:01 +0000]
qemu_conf: Properly check for retval of qemuDomainNamespaceAvailable

This function is returning a boolean therefore check for '< 0'
makes no sense. It should have been

Signed-off-by: Michal Privoznik <>

6 days agoqemu_conf: Check for namespaces availability more wisely
Michal Privoznik [Wed, 15 Feb 2017 09:06:09 +0000]
qemu_conf: Check for namespaces availability more wisely

The bare fact that mnt namespace is available is not enough for
us to allow/enable qemu namespaces feature. There are other
requirements: we must copy all the ACL & SELinux labels otherwise
we might grant access that is administratively forbidden or vice
At the same time, the check for namespace prerequisites is moved
from domain startup time to qemu.conf parser as it doesn't make
much sense to allow users to start misconfigured libvirt just to
find out they can't start a single domain.

Signed-off-by: Michal Privoznik <>

7 days agoapparmor: don't fail on non-apparmor <seclabel>
Jim Fehlig [Fri, 3 Feb 2017 02:26:13 +0000]
apparmor: don't fail on non-apparmor <seclabel>

If the apparmor security driver is loaded/enabled and domain config
contains a <seclabel> element whose type attribute is not 'apparmor',
starting the domain fails when attempting to label resources such
as tap FDs.

Many of the apparmor driver entry points attempt to retrieve the
apparmor security label from the domain def, returning failure if
not found. Functions such as AppArmorSetFDLabel fail even though
domain config contains an explicit 'none' secuirty driver, e.g.

  <seclabel type='none' model='none'/>

Change the entry points to succeed if the domain config <seclabel>
is not apparmor. This matches the behavior of the selinux driver.

7 days agoapparmor: don't overwrite error from reload_profile
Jim Fehlig [Fri, 3 Feb 2017 02:17:29 +0000]
apparmor: don't overwrite error from reload_profile

Like other callers of reload_profile, don't overwrite errors in

7 days agoqemu_monitor_json: Properly check GetArray return value
Jiri Denemark [Mon, 13 Feb 2017 08:32:21 +0000]
qemu_monitor_json: Properly check GetArray return value

Commit 2a8d40f4ec refactored qemuMonitorJSONGetCPUx86Data and replaced
virJSONValueObjectGet(reply, "return") with virJSONValueObjectGetArray.
While the former is guaranteed to always return non-NULL pointer the
latter may return NULL if the returned JSON object is not an array.

Signed-off-by: Jiri Denemark <>

7 days agoqemu: Call chmod() after mknod()
Andrea Bolognani [Tue, 14 Feb 2017 14:46:23 +0000]
qemu: Call chmod() after mknod()

mknod() is affected my the current umask, so we're not
guaranteed the newly-created device node will have the
right permissions.

Call chmod(), which is not affected by the current umask,
immediately afterwards to solve the issue.


7 days agospec: Require libacl when building the QEMU driver
Andrea Bolognani [Tue, 14 Feb 2017 13:42:54 +0000]
spec: Require libacl when building the QEMU driver

For the namespaces feature to work properly we need to be able
to make a perfect copy of the original /dev, including ACLs.

By adding a BuildRequires on libacl-devel we ensure that ACL
support will be enabled at configure time and made available
to the QEMU driver.

7 days agoconfigure: Move ACL checks to a separate file
Andrea Bolognani [Tue, 14 Feb 2017 14:21:29 +0000]
configure: Move ACL checks to a separate file

7 days agoutil: fix off-by-one when expanding a bitmap
Ján Tomko [Mon, 30 Jan 2017 12:52:02 +0000]
util: fix off-by-one when expanding a bitmap

To make sure bit 'b' fits into the bitmap, we need to allocate b+1
bits, since we number from 0.

Adjust the bitmap test to set a bit at a multiple of 16.
That way the test fails without this fix, because the VIR_REALLOC
call clears the newly added memory even if the original pointer
has not changed.

7 days agovalgrind: add suppression for bash memory leak
Tomáš Golembiovský [Mon, 13 Feb 2017 22:49:06 +0000]
valgrind: add suppression for bash memory leak

Add suppression for memory leak in bash observerd with bash 4.4.011 on
Arch Linux.

Signed-off-by: Tomáš Golembiovský <>

8 days agoqemu: enforce maximum ports value for nec-xhci
Ján Tomko [Mon, 28 Nov 2016 16:37:39 +0000]
qemu: enforce maximum ports value for nec-xhci

This controller only allows up to 15 ports.

8 days agodocs: document bhyve e1000 support
Roman Bogorodskiy [Sun, 12 Feb 2017 16:42:31 +0000]
docs: document bhyve e1000 support

 * Add bhyve e1000 support entry to release notes
 * Update the bhyve driver page with usage sample

8 days agoconf: check port range even for USB hubs
Ján Tomko [Mon, 30 Jan 2017 14:56:10 +0000]
conf: check port range even for USB hubs

Move the range check introduced by commit 2650d5e into
virDomainUSBAddressFindPort. That way both virDomainUSBAddressRelease
and virDomainUSBAddressSetAddHub can benefit from it.

Reported-by: Michal Privoznik <>

8 days agoqemu: assign USB port on a selected hub for all devices
Ján Tomko [Fri, 27 Jan 2017 17:08:22 +0000]
qemu: assign USB port on a selected hub for all devices

Due to a logic error, the autofilling of USB port when a bus is
    <address type='usb' bus='0'/>
does not work for non-hub devices on domain startup.

Fix the logic in qemuDomainAssignUSBPortsIterator to also
assign ports for USB addresses that do not yet have one.

9 days agorpc: Fix potentially segfaults
Marc Hartmayer [Thu, 9 Feb 2017 14:13:38 +0000]
rpc: Fix potentially segfaults

We have to allocate first and if, and only if, it was successful we
can set the count. A segfault has occurred in
virNetServerServiceNewPostExecRestart() when VIR_ALLOC_N(svc->socks,
n) has failed, but svc->nsocsk = n was already set. Thus
virObejectUnref(svc) was called and therefore it was possible that
virNetServerServiceDispose was called => segmentation fault.  For
safeness NULL pointer check were added in

Signed-off-by: Marc Hartmayer <>
Reviewed-by: Boris Fiuczynski <>
Reviewed-by: Bjoern Walk <>

11 days agobhyve: add e1000 nic support
Roman Bogorodskiy [Sat, 27 Aug 2016 12:30:34 +0000]
bhyve: add e1000 nic support

Recently e1000 NIC support was added to bhyve; implement that in
the bhyve driver:

 - Add capability check by analyzing output of the 'bhyve -s 0,e1000'
 - Modify bhyveBuildNetArgStr() to support e1000 and also pass
   virConnectPtr so it could call bhyveDriverGetCaps() to check if this
   NIC is supported
 - Modify command parsing code to add support for e1000 and adjust tests
 - Add net-e1000 test

11 days agoutil: Fix indentation for virnetdevmacvlan
Nitesh Konkar [Fri, 10 Feb 2017 14:35:23 +0000]
util: Fix indentation for virnetdevmacvlan

Signed-off-by: Nitesh Konkar <>

11 days agolibxl: Resolve possible resource leak in dom0 maximum memory setting
John Ferlan [Fri, 10 Feb 2017 11:54:56 +0000]
libxl: Resolve possible resource leak in dom0 maximum memory setting

If either the "if (STRPREFIX(mem_tokens[j], "max:"))" is never entered
or the "if (virStrToLong_ull(mem_tokens[j] + 4, &p, 10, maxmem) < 0)" break
is hit, control goes back to the outer loop processing 'cmd_tokens' and
it's possible that the 'mem_tokens' would be overwritten.

Found by Coverity

11 days agostorage: Fix checking whether source filesystem is mounted
Erik Skultety [Tue, 7 Feb 2017 09:19:21 +0000]
storage: Fix checking whether source filesystem is mounted

Right now, we use simple string comparison both on the source paths
(mount's output vs pool's source) and the target (mount's mnt_dir vs
pool's target). The problem are symlinks and mount indeed returns
symlinks in its output, e.g. /dev/mappper/lvm_symlink. The same goes for
the pool's source/target, so in order to successfully compare these two
replace plain string comparison with virFileComparePaths which will
resolve all symlinks and canonicalize the paths prior to comparison.


Signed-off-by: Erik Skultety <>

11 days agoutil: Introduce virFileComparePaths
Erik Skultety [Tue, 7 Feb 2017 09:19:06 +0000]
util: Introduce virFileComparePaths

So rather than comparing 2 paths (strings) as they are, which can very
easily lead to unnecessary errors (e.g. in storage driver) that the paths
are not the same when in fact they'd be e.g. just symlinks to the same
location, we should put our best effort into resolving any symlinks and
canonicalizing the path and only then compare the 2 paths for equality.

Signed-off-by: Erik Skultety <>

11 days agostorage: Fix reporting an error on an already mounted filesystem
Erik Skultety [Mon, 6 Feb 2017 14:03:52 +0000]
storage: Fix reporting an error on an already mounted filesystem

When FS pool's source is already mounted on the target location instead
of just simply marking the pool as active, thus starting it we fail with
an error stating that the source is indeed already mounted on the target.

Signed-off-by: Erik Skultety <>

11 days agotests: Link virusbmock with probes
John Ferlan [Fri, 10 Feb 2017 13:00:41 +0000]
tests: Link virusbmock with probes

Seeing similar error to commit id '997be5c27' with the inability
to find the libvirt_event_poll_purge_timeout_semaphore symbol
causing a virusbtest failure.

11 days agoremote generator: Increase upper limit on lists of node devices
Boris Fiuczynski [Fri, 10 Feb 2017 13:56:51 +0000]
remote generator: Increase upper limit on lists of node devices

On a system with 697 SCSI disks each configured with 8 paths the command
virsh nodedev-list fails with
error: Failed to list node devices
error: internal error: Too many node_devices '16816' for limit '16384'
Increasing the upper limit on lists of node devices from 16K to 64K.

Signed-off-by: Boris Fiuczynski <>