]> xenbits.xensource.com Git - libvirt.git/log
libvirt.git
7 years agoutil: Add virCommandGetGID and virCommandGetUID
Marc Hartmayer [Mon, 9 Oct 2017 19:14:55 +0000 (21:14 +0200)]
util: Add virCommandGetGID and virCommandGetUID

These functions are used by an upcoming commit.

Signed-off-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
7 years agoqemu: Remove redundant code in qemuParseCommandLineDisk
Kothapally Madhu Pavan [Sun, 8 Oct 2017 09:24:53 +0000 (14:54 +0530)]
qemu: Remove redundant code in qemuParseCommandLineDisk

Signed-off-by: Kothapally Madhu Pavan <kmp@linux.vnet.ibm.com>
7 years agoapparmor: add dnsmasq ptrace rule to libvirtd profile
Jim Fehlig [Fri, 6 Oct 2017 20:20:36 +0000 (14:20 -0600)]
apparmor: add dnsmasq ptrace rule to libvirtd profile

Commit b482925c added ptrace rule for the apparmor profiles,
but one was missed in the libvirtd profile for dnsmasq. It was
overlooked since the test machine did not have an active libvirt
network requiring dnsmasq that was also set to autostart. With
one active and set to autostart, the following denial is observed
in audit.log when restarting libvirtd

type=AVC msg=audit(1507320136.306:298): apparmor="DENIED" \
operation="ptrace" profile="/usr/sbin/libvirtd" pid=5472 \
comm="libvirtd" requested_mask="trace" denied_mask="trace" \
peer="/usr/sbin/dnsmasq"

With an active network, I suspect a libvirtd restart causes access
to /proc/<dnsmasq-pid>/*, hence the resulting denial. As a nasty
side affect of the denial, libvirtd thinks it needs to spawn a
dnsmasq process even though one is already running for the network.
E.g. after two libvirtd restarts

dnsmasq   1683  0.0  0.0  51188  2612 ?        S    12:03   0:00 \
 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf \
 --leasefile-ro --dhcp-script=/usr/lib64/libvirt/libvirt_leaseshelper
root      1684  0.0  0.0  51160   576 ?        S    12:03   0:00 \
 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf \
 --leasefile-ro --dhcp-script=/usr/lib64/libvirt/libvirt_leaseshelper
dnsmasq   4706  0.0  0.0  51188  2572 ?        S    13:54   0:00 \
 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf \
 --leasefile-ro --dhcp-script=/usr/lib64/libvirt/libvirt_leaseshelper
root      4707  0.0  0.0  51160   572 ?        S    13:54   0:00 \
 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf \
 --leasefile-ro --dhcp-script=/usr/lib64/libvirt/libvirt_leaseshelper
dnsmasq   4791  0.0  0.0  51188  2580 ?        S    13:56   0:00 \
 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf \
 --leasefile-ro --dhcp-script=/usr/lib64/libvirt/libvirt_leaseshelper
root      4792  0.0  0.0  51160   572 ?        S    13:56   0:00 \
 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf \
 --leasefile-ro --dhcp-script=/usr/lib64/libvirt/libvirt_leaseshelper

A simple fix is to add a ptrace rule for dnsmasq.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-By: Guido Günther <agx@sigxcpu.org>
7 years agonuma: rename function virDomainNumaDefCPUFormat
Wim ten Have [Fri, 8 Sep 2017 14:47:14 +0000 (16:47 +0200)]
numa: rename function virDomainNumaDefCPUFormat

Rename virDomainNumaDefCPUFormat to virDomainNumaDefCPUFormatXML,
matching its peer virDomainNumaDefCPUParseXML and the general
vir*{Format,Parse}XML conventions.

Signed-off-by: Wim ten Have <wim.ten.have@oracle.com>
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
7 years agobuild: isolate core libvirt libs deps from xen runtime
Wim ten Have [Fri, 6 Oct 2017 12:16:07 +0000 (14:16 +0200)]
build: isolate core libvirt libs deps from xen runtime

Generating libvirt packages per make rpm, "with-libxl=1" and "with-xen=1",
adds strict runtime dependencies per libxenlight for xen-libs package from
core libvirt-libs package.  This is not necessary and unfortunate since
those dependencies set demand to "xen-libs" package even when there's no
need for libvirt xen or libxl driver components.

This patch is to have two separate xenconfig lib tool libraries: one for
core libvirt (without XL), and a another that contains xl for libxl driver
(libvirt_driver_libxl_impl.la) which when loading the driver, loads the
remaining symbols (xen{Format,Parse}XL. For the user/sysadmin, this means
the xen dependencies are moved into libxl driver, instead of core libvirt.

Signed-off-by: Joao Martins <joao.m.martins@oracle.com>
Signed-off-by: Wim ten Have <wim.ten.have@oracle.com>
Reviewed-by: Jim Fehlig <jfehlig@suse.com>
7 years agostorage: Use virStoragePoolObjGetDef accessor for Gluster backend
John Ferlan [Wed, 26 Jul 2017 18:23:46 +0000 (14:23 -0400)]
storage: Use virStoragePoolObjGetDef accessor for Gluster backend

In preparation for privatizing the object, use the accessor.

7 years agostorage: Use virStoragePoolObjGetDef accessor for FS backend
John Ferlan [Wed, 26 Jul 2017 18:21:08 +0000 (14:21 -0400)]
storage: Use virStoragePoolObjGetDef accessor for FS backend

In preparation for privatizing the object, use the accessor.

7 years agostorage: Use virStoragePoolObjGetDef accessor for Sheepdog backend
John Ferlan [Wed, 26 Jul 2017 18:17:22 +0000 (14:17 -0400)]
storage: Use virStoragePoolObjGetDef accessor for Sheepdog backend

In preparation for privatizing the object, use the accessor.

7 years agostorage: Use virStoragePoolObjGetDef accessor for Logical backend
John Ferlan [Wed, 26 Jul 2017 18:16:52 +0000 (14:16 -0400)]
storage: Use virStoragePoolObjGetDef accessor for Logical backend

In preparation for privatizing the object, use the accessor.

7 years agostorage: Use virStoragePoolObjGetDef accessor for Disk backend
John Ferlan [Wed, 26 Jul 2017 18:06:59 +0000 (14:06 -0400)]
storage: Use virStoragePoolObjGetDef accessor for Disk backend

In preparation for privatizing the object, use the accessor.

7 years agostorage: Use virStoragePoolObjGetDef accessor for storage_util
John Ferlan [Mon, 8 May 2017 12:47:32 +0000 (08:47 -0400)]
storage: Use virStoragePoolObjGetDef accessor for storage_util

In preparation for privatizing the object, use the accessor.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agotest: Use virStoragePoolObjGetDef accessor
John Ferlan [Mon, 8 May 2017 12:21:52 +0000 (08:21 -0400)]
test: Use virStoragePoolObjGetDef accessor

In preparation for privatizing the object, use the accessor.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agotest: Create local virStoragePoolObjPtr VolLookup APIs
John Ferlan [Wed, 26 Jul 2017 17:38:45 +0000 (13:38 -0400)]
test: Create local virStoragePoolObjPtr VolLookup APIs

Rather than accessing privconn->pools.objs[i] in the for loop,
let's use an @obj variable to make it easier to read the code.

7 years agotest: Rename @vol to @volDef in testOpenVolumesForPool
John Ferlan [Wed, 26 Jul 2017 17:33:30 +0000 (13:33 -0400)]
test: Rename @vol to @volDef in testOpenVolumesForPool

Make it more obvious as we're about to need to change how
obj->def gets referenced.

Perform a couple of minor cleanups along the way too.

7 years agostorage: Use virStoragePoolObjGetDef accessor for driver
John Ferlan [Mon, 8 May 2017 16:41:11 +0000 (12:41 -0400)]
storage: Use virStoragePoolObjGetDef accessor for driver

In preparation for privatizing the object, use the accessor to fetch
the obj->def instead of the direct reference.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agotests: Fix possible NULL deref
John Ferlan [Wed, 20 Sep 2017 11:47:17 +0000 (07:47 -0400)]
tests: Fix possible NULL deref

7 years agoconf: Fix prototype/definition for virStoragePoolObj get functions
John Ferlan [Tue, 19 Sep 2017 12:55:43 +0000 (08:55 -0400)]
conf: Fix prototype/definition for virStoragePoolObj get functions

Modify virStoragePoolObjGetAutostartLink and
virStoragePoolObjGetConfigFile to return "const char *"
since that's how both are used and to ensure no one
tries to VIR_FREE the result.

7 years agovirt-aa-helper: put static rules in quotes
Christian Ehrhardt [Wed, 20 Sep 2017 14:59:09 +0000 (16:59 +0200)]
virt-aa-helper: put static rules in quotes

To avoid any issues later on if paths ever change (unlikely but
possible) and to match the style of other generated rules the paths
of the static rules have to be quoted as well.

Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
7 years agovirt-aa-helper: allow spaces in vm names
Christian Ehrhardt [Wed, 20 Sep 2017 14:59:08 +0000 (16:59 +0200)]
virt-aa-helper: allow spaces in vm names

libvirt allows spaces in vm names, there were issues in the past but it
seems not removed so the assumption has to be that spaces are continuing
to be allowed.

Therefore virt-aa-helper should not reject spaces in vm names anymore if
it is going to be refused causing issues then the parser or xml schema
should do so.
Apparmor rules are in quotes, so a space in a path based on the name works.

Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agovirt-aa-helper: fix libusb access to udev usb data
Christian Ehrhardt [Wed, 20 Sep 2017 14:59:07 +0000 (16:59 +0200)]
virt-aa-helper: fix libusb access to udev usb data

libusb as used by qemu needs to read data from /run/udev/data/ about usb
devices. That is read once on the first initialization of libusb_init by
qemu.

Therefore generating just the device we need would not be sufficient as
another hotplug later can need another device which would fail as the
data is no more re-read at this point.

But we can restrict the paths very much to just the major number of
potential usb devices which will make it match approximately the detail
that e.g. an lsusb -v would reveal - that is much safer than the
"/run/udev/data/* r" blanket many users are using now as a workaround.

Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
7 years agovirt-aa-helper: fix paths for usb hostdevs
Christian Ehrhardt [Wed, 20 Sep 2017 14:59:06 +0000 (16:59 +0200)]
virt-aa-helper: fix paths for usb hostdevs

If users only specified vendor&product (the common case) then parsing
the xml via virDomainHostdevSubsysUSBDefParseXML would only set these.
Bus and Device would much later be added when the devices are prepared
to be added.

Due to that a hot-add of a usb hostdev works as the device is prepared
and virt-aa-helper processes the new internal xml. But on an initial
guest start at the time virt-aa-helper renders the apparmor rules the
bus/device id's are not set yet:

p ctl->def->hostdevs[0]->source.subsys.u.usb
$12 = {autoAddress = false, bus = 0, device = 0, vendor = 1921, product
= 21888}

That causes rules to be wrong:
  "/dev/bus/usb/000/000" rw,

The fix calls virHostdevFindUSBDevice after reading the XML from
virt-aa-helper to only add apparmor rules for devices that could be found
and now are fully known to be able to write the rule correctly.

It uncondtionally sets virHostdevFindUSBDevice mandatory attribute as
adding an apparmor rule for a device not found makes no sense no matter
what startup policy it has set.

Signed-off-by: Christian Ehrhardt <christian.ehrhardt@canonical.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agoqemu: process: Don't redetect backing chain on reconnect
Peter Krempa [Wed, 27 Sep 2017 16:06:44 +0000 (18:06 +0200)]
qemu: process: Don't redetect backing chain on reconnect

Skip purging the backing chain and redetecting it when it was not going
to change during the time we were not present.

The decision is based on the new flag which records whether there were
blockjobs running to the status XML.

7 years agoqemu: process: Simplify access to individual disk when reconnecting
Peter Krempa [Thu, 5 Oct 2017 12:00:08 +0000 (14:00 +0200)]
qemu: process: Simplify access to individual disk when reconnecting

Add a helper variable so that we don't have to access the disk via 3
indirections.

7 years agoqemu: domain: Mark if no blockjobs are active in the status XML
Peter Krempa [Tue, 26 Sep 2017 14:37:47 +0000 (16:37 +0200)]
qemu: domain: Mark if no blockjobs are active in the status XML

Note when no blockjobs are running in the status XML so that we know
that the backing chain will not change until we reconnect.

7 years agoutil: Add functions to simplify bool->virTristate(Bool|Switch) assignment
Peter Krempa [Thu, 5 Oct 2017 11:06:41 +0000 (13:06 +0200)]
util: Add functions to simplify bool->virTristate(Bool|Switch) assignment

virTristateBoolFromBool and virTristateSwitchFromBool convert a boolean
to the correct enum value.

7 years agonews: Document watchdog hot-(un)plug change
Michal Privoznik [Thu, 5 Oct 2017 13:11:25 +0000 (15:11 +0200)]
news: Document watchdog hot-(un)plug change

In 361c8dc17 and 662140fa68ae0 I've implemented hot-(un)plug of
watchdog devices. Document this change.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agoqemu: hot-unplug of watchdog
Michal Privoznik [Tue, 5 Sep 2017 09:08:36 +0000 (11:08 +0200)]
qemu: hot-unplug of watchdog

https://bugzilla.redhat.com/show_bug.cgi?id=1447169

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agoqemu: hot-plug of watchdog
Michal Privoznik [Fri, 1 Sep 2017 11:39:15 +0000 (13:39 +0200)]
qemu: hot-plug of watchdog

https://bugzilla.redhat.com/show_bug.cgi?id=1447169

Since domain can have at most one watchdog it simplifies things a
bit. However, since we must be able to set the watchdog action as
well, new monitor command needs to be used.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agoqemuDomainDeviceDefValidate: Validate watchdog
Michal Privoznik [Wed, 27 Sep 2017 11:45:07 +0000 (13:45 +0200)]
qemuDomainDeviceDefValidate: Validate watchdog

Currently we don't do it. Therefore we accept senseless
combinations of models and buses they are attached to.
Moreover, diag288 watchdog is exclusive to s390(x).

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agodocs,rng: Adjust storage pool name grammar checks
John Ferlan [Tue, 3 Oct 2017 11:14:04 +0000 (07:14 -0400)]
docs,rng: Adjust storage pool name grammar checks

https://bugzilla.redhat.com/show_bug.cgi?id=1475250

It's possible to define and start a pool with a '.' in the
name; however, when trying to add a volume to a domain using
the storage pool source with a '.' in the storage pool name,
the domain RNG validation fails because RNG uses 'genericName'
which does not allow a '.' in the name.

Domain XML def parsing has a virXMLValidateAgainstSchema which
generates the error. The Storage Pool XML def parsing has no
call to virXMLValidateAgainstSchema. The only Storage Pool name
validation occurs in virStoragePoolDefParseXML to ensure the
name doesn't have a '/' in it and in storagePoolDefineXML to
call virXMLCheckIllegalChars using the same parameter "\n" as
qemuDomainDefineXMLFlags would check after the RNG check
could be succesful.

In order to resolve this, create a poolName definition in
storagecommon.rng that will mimic the domain name regex that
disallows a newline character, but add the "/" in the exclude
list. Then modify the pool and volume source name definitions
to key off that poolName.

7 years agotests: qemuxml2xml: Simplify adding to the status XML expect string generator
Peter Krempa [Tue, 26 Sep 2017 15:11:16 +0000 (17:11 +0200)]
tests: qemuxml2xml: Simplify adding to the status XML expect string generator

Unindent the static XML block and move around the autoindent calls so
that further additions don't have to add more of them.

Also rename the string holding the static XML section.

7 years agoqemu: driver: Save status XML when starting a block job
Peter Krempa [Wed, 27 Sep 2017 15:50:31 +0000 (17:50 +0200)]
qemu: driver: Save status XML when starting a block job

Few jobs (which don't) use the 'mirror' element did not save the status
XML. It will be helpful to do so once we start tracking jobs fully.

7 years agoqemu: blockjob: Always save config XML when a blockjob is finished
Peter Krempa [Mon, 28 Aug 2017 13:36:05 +0000 (15:36 +0200)]
qemu: blockjob: Always save config XML when a blockjob is finished

For VMs with persistent config the config may change upon successful
completion of a job. Save it always if a persistent VM finishes a
blockjob. This will simplify further additions.

7 years agoqemu: blockjob: Always save status XML after block event
Peter Krempa [Mon, 28 Aug 2017 13:21:06 +0000 (15:21 +0200)]
qemu: blockjob: Always save status XML after block event

The status XML would be saved only for the copy job (in case of success)
or on failure even for other jobs. As the status contains the backing
chain data, which change after success we should always save it on
block job completion.

7 years agonews: Document domifstat and QoS changes made recently
Michal Privoznik [Thu, 5 Oct 2017 07:29:35 +0000 (09:29 +0200)]
news: Document domifstat and QoS changes made recently

In cea3715b2e9 and d86fd2402e9d2 I've fixed domifstat and QoS
that was reversed for some types of interfaces. Document this
in the news file.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agospec: Enable qemu driver on s390x on RHEL/CentOS
Jiri Denemark [Thu, 5 Oct 2017 07:17:06 +0000 (09:17 +0200)]
spec: Enable qemu driver on s390x on RHEL/CentOS

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7 years agoqemu: process: move disk presence checking to host setup function
Peter Krempa [Tue, 3 Oct 2017 10:38:19 +0000 (12:38 +0200)]
qemu: process: move disk presence checking to host setup function

Checking of disk presence accesses storage on the host so it should be
done from the host setup function. Move the code to new function called
qemuProcessPrepareHostStorage and remove qemuDomainCheckDiskPresence.

7 years agoqemu: process: Move TLS setup for storage source to qemuProcessPrepareDomainStorage
Peter Krempa [Tue, 3 Oct 2017 11:16:05 +0000 (13:16 +0200)]
qemu: process: Move TLS setup for storage source to qemuProcessPrepareDomainStorage

7 years agoqemu: process: Move 'volume' translation to domain prepare stage
Peter Krempa [Tue, 3 Oct 2017 10:38:23 +0000 (12:38 +0200)]
qemu: process: Move 'volume' translation to domain prepare stage

Introduce a new function to prepare domain disks which will also do the
volume source to actual disk source translation.

The 'pretend' condition is not transferred to the new location since it
does not help in writing tests and also no tests abuse it.

7 years agoqemu: domain: Document and export qemuDomainCheckDiskStartupPolicy
Peter Krempa [Tue, 3 Oct 2017 10:51:47 +0000 (12:51 +0200)]
qemu: domain: Document and export qemuDomainCheckDiskStartupPolicy

7 years agoqemu: process: Pass flags to qemuProcessPrepareHost
Peter Krempa [Tue, 3 Oct 2017 08:14:21 +0000 (10:14 +0200)]
qemu: process: Pass flags to qemuProcessPrepareHost

Pass flags to the function rather than just whether we have incoming
migration. This also enforces correct startup policy for USB devices
when reverting from a snapshot.

7 years agoqemu: migration: Extract flags for starting VM into a variable
Peter Krempa [Tue, 3 Oct 2017 07:59:03 +0000 (09:59 +0200)]
qemu: migration: Extract flags for starting VM into a variable

qemuMigrationPrepareAny called multiple of the functions starting the
qemu process for incoming migration by adding the flags explicitly.
Extract them to a variable so that they can be easily used for other
calls or changed in the future.

7 years agoqemu: process: document parameters for startup preparing functions
Peter Krempa [Tue, 3 Oct 2017 07:51:27 +0000 (09:51 +0200)]
qemu: process: document parameters for startup preparing functions

Document mainly what flag values are passed in.

7 years agoqemu: command: Move PPC fdc check to domain validation
Peter Krempa [Tue, 3 Oct 2017 12:06:15 +0000 (14:06 +0200)]
qemu: command: Move PPC fdc check to domain validation

Apart from not littering the command line generator, the added benefit
is that new configs with a FDC will be rejected at define stage.

7 years agoqemu: command: Separate validation from command line building for -drive
Peter Krempa [Mon, 2 Oct 2017 15:13:44 +0000 (17:13 +0200)]
qemu: command: Separate validation from command line building for -drive

Remove validation code into a separate function so that it's not
interleaved with actual building of the command line.

7 years agolibvirt-domain: Document interface stats POV
Michal Privoznik [Mon, 2 Oct 2017 14:31:30 +0000 (16:31 +0200)]
libvirt-domain: Document interface stats POV

Interestingly enough, we don't document the point of view of the
interface statistics. Therefore it's unknown to users if for
instance rx_packets is the number of packets received by domain or
received by host (from domain). Document this explicitly.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
7 years agoQoS: Set classes and filters in proper direction
Michal Privoznik [Mon, 2 Oct 2017 12:12:44 +0000 (14:12 +0200)]
QoS: Set classes and filters in proper direction

Similarly to previous patch, for some types of interface domain
and host are on the same side of RX/TX barrier. In that case, we
need to set up the QoS differently. Well, swapped.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agovirNetDevTapInterfaceStats: Allow caller to not swap the statistics
Michal Privoznik [Mon, 2 Oct 2017 11:36:56 +0000 (13:36 +0200)]
virNetDevTapInterfaceStats: Allow caller to not swap the statistics

https://bugzilla.redhat.com/show_bug.cgi?id=1497410

The comment in virNetDevTapInterfaceStats() implementation for
Linux states that packets transmitted by domain are received by
the host and vice versa. Well, this is true but not for all types
of interfaces. For instance, for macvtaps when TAP device is
hooked right onto a physical device any packet that domain sends
looks also like a packet sent to the host. Therefore, we should
allow caller to chose if the stats returned should be straight
copy or swapped.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agosrc: Use virDomainNetFindByName
Michal Privoznik [Mon, 2 Oct 2017 13:24:39 +0000 (15:24 +0200)]
src: Use virDomainNetFindByName

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agoconf: Introduce virDomainNetFindByName
Michal Privoznik [Mon, 2 Oct 2017 13:04:14 +0000 (15:04 +0200)]
conf: Introduce virDomainNetFindByName

Small wrapper to lookup interface in domain definition by its
name.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agoqemuDomainInterfaceStats: Check for the actual type of interface
Michal Privoznik [Mon, 2 Oct 2017 11:12:43 +0000 (13:12 +0200)]
qemuDomainInterfaceStats: Check for the actual type of interface

Users might have configured interface so that it's type of
network, but the corresponding network plugs interfaces into an
OVS bridge. Therefore, we have to check for the actual type of
the interface instead of the configured one.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agolxc: Drop useless ifdef __linux__
Michal Privoznik [Mon, 2 Oct 2017 13:19:19 +0000 (15:19 +0200)]
lxc: Drop useless ifdef __linux__

This code compiles only on Linux. Therefore the condition we
check is always true.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agotests: Fix build with clang
Jiri Denemark [Thu, 5 Oct 2017 07:06:03 +0000 (09:06 +0200)]
tests: Fix build with clang

clang doesn't like mode_t type as an argument to va_arg():

error: second argument to 'va_arg' is of promotable type 'mode_t' (aka
'unsigned short'); this va_arg has undefined behavior because arguments
will be promoted to 'int'

    mode = va_arg(ap, mode_t);
                      ^~~~~~

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7 years agostorage: Fix incorrect parenthesis placement
Pavel Hrdina [Wed, 4 Oct 2017 14:33:06 +0000 (16:33 +0200)]
storage: Fix incorrect parenthesis placement

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1498528

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: Support multiqueue virtio-blk
Lin Ma [Sat, 30 Sep 2017 17:15:36 +0000 (01:15 +0800)]
qemu: Support multiqueue virtio-blk

qemu 2.7.0 introduces multiqueue virtio-blk(commit 2f27059).
This patch introduces a new attribute "queues". An example of
the XML:

<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' queues='4'/>

The corresponding QEMU command line:

-device virtio-blk-pci,scsi=off,num-queues=4,id=virtio-disk0

Signed-off-by: Lin Ma <lma@suse.com>
Signed-off-by: Ján Tomko <jtomko@redhat.com>
7 years agoqemucapstest: Update test data for 'num-queues' property of virtio-blk
Lin Ma [Sat, 30 Sep 2017 17:15:35 +0000 (01:15 +0800)]
qemucapstest: Update test data for 'num-queues' property of virtio-blk

Signed-off-by: Lin Ma <lma@suse.com>
7 years agovirDomainNetFindIdx: Ignore auto generated MAC addresses
Michal Privoznik [Mon, 2 Oct 2017 10:43:04 +0000 (12:43 +0200)]
virDomainNetFindIdx: Ignore auto generated MAC addresses

When detaching an <interface/> from a domain, the MAC address is
parsed and if not present one is generated. If no corresponding
interface is found in the domain, the following error is
reported:

error: operation failed: no device matching mac address 52:54:00:75:32:5b found

where the MAC address is the auto generated one. This might be
very confusing. Solution to this is to ignore auto generated MAC
address when looking up the device.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
7 years agovirmacaddr: Track if MAC address is autogenerated
Michal Privoznik [Mon, 2 Oct 2017 08:47:27 +0000 (10:47 +0200)]
virmacaddr: Track if MAC address is autogenerated

It will come handy to know if the MAC address was generated (e.g.
during XML parse) or if it was parsed since provided by user in
the XML.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
7 years agoqemuParseCommandLineNet: Make it more readable
Michal Privoznik [Fri, 29 Sep 2017 14:12:19 +0000 (16:12 +0200)]
qemuParseCommandLineNet: Make it more readable

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
7 years agonwfilter: Fix memory leak and error path
John Ferlan [Fri, 29 Sep 2017 13:21:47 +0000 (09:21 -0400)]
nwfilter: Fix memory leak and error path

Found by Coverity. If virNWFilterHashTablePut, then the 3rd arg @val
must be free'd since it would be leaked.

This also fixes potential problem on the error path where the caller
could assume the virNWFilterHashTablePut was successful when in fact
it failed leading to other issues.

7 years agonwfilter: Clean up virNWFilterDetermineMissingVarsRec returns
John Ferlan [Fri, 29 Sep 2017 13:18:53 +0000 (09:18 -0400)]
nwfilter: Clean up virNWFilterDetermineMissingVarsRec returns

Rather than using loop break;'s in order to force a return
of rc = -1, let's just return -1 immediately on the various
error paths and then return 0 on the success path.

7 years agotests: Do not ignore mode parameter in mocked open()
Luyao Huang [Mon, 25 Sep 2017 18:27:07 +0000 (20:27 +0200)]
tests: Do not ignore mode parameter in mocked open()

This is normally not an issue since the tests which use mocked open() do
not create files. But once coverage build is enabled, gcov_open will use
O_CREATE and real_open will read random data rather than the actual mode
argument.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7 years agoutil: Free a pointer in virPolkitCheckAuth
Kothapally Madhu Pavan [Wed, 4 Oct 2017 08:38:45 +0000 (14:08 +0530)]
util: Free a pointer in virPolkitCheckAuth

Free DBusMessage pointer in virPolkitCheckAuth

Signed-off-by: Kothapally Madhu Pavan <kmp@linux.vnet.ibm.com>
7 years agoconf: Split out parsing of network disk source XML elements
Peter Krempa [Tue, 9 May 2017 12:25:02 +0000 (14:25 +0200)]
conf: Split out parsing of network disk source XML elements

virDomainDiskSourceParse got to the point of being an ugly spaghetti
mess by adding more and more stuff into it. Split out parsing of network
disk information into a separate function so that it stays contained.

7 years agoPost-release version bump to 3.9.0
Peter Krempa [Wed, 4 Oct 2017 08:35:18 +0000 (10:35 +0200)]
Post-release version bump to 3.9.0

7 years agoRelease of libvirt-3.8.0
Daniel Veillard [Wed, 4 Oct 2017 08:20:23 +0000 (10:20 +0200)]
Release of libvirt-3.8.0

* docs/news.xml: updated for release
* po/*.po*: regenerated

7 years agospec: Delay supported_platform check
Jiri Denemark [Tue, 3 Oct 2017 11:41:05 +0000 (13:41 +0200)]
spec: Delay supported_platform check

Building RPM should only be allowed on a supported platform, but
unpacking the source and applying all patches can be done anywhere.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7 years agodocs: Document the real behaviour of suspend-to-{mem,disk}
Martin Kletzander [Fri, 29 Sep 2017 12:26:53 +0000 (14:26 +0200)]
docs: Document the real behaviour of suspend-to-{mem,disk}

We get a question every now and then about why hibernation works when
suspend-to-disk is disabled and similar.  Let's hope that, by documenting the
obvious more blatantly, people will get more informed.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
7 years agonwfilter: Don't have virNWFilterIPAddrMapAddIPAddr consume input
John Ferlan [Fri, 29 Sep 2017 19:55:29 +0000 (15:55 -0400)]
nwfilter: Don't have virNWFilterIPAddrMapAddIPAddr consume input

On pure success paths, virNWFilterIPAddrMapAddIPAddr was validly
consuming the input @addr; however, on failure paths it was possible
that virNWFilterVarValueCreateSimple succeed, but virNWFilterHashTablePut
failed resulting in virNWFilterVarValueFree being called to clean
up @val which also cleaned up the input @addr. Thus the caller had
no way to determine on failure whether it too should clean up the
passed parameter.

Instead, let's create a copy of the input @addr, then handle that
properly in the API allowing/forcing the caller to free it's own
copy of the input parameter.

7 years agoRevert "nwfilter: Fix possible segfault on sometimes consumed variable"
John Ferlan [Thu, 28 Sep 2017 19:13:46 +0000 (15:13 -0400)]
Revert "nwfilter: Fix possible segfault on sometimes consumed variable"

This reverts commit 6209bb32e5b6d8c15d55422bb4716b3b31c1c7b2.

This turns out to be the wrong adjustment

7 years agodocs: Add some changes to news.xml for this release
Martin Kletzander [Fri, 29 Sep 2017 14:48:35 +0000 (16:48 +0200)]
docs: Add some changes to news.xml for this release

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
7 years agoFix vxhs test to have stable certificate dir
Daniel P. Berrange [Thu, 28 Sep 2017 17:41:21 +0000 (18:41 +0100)]
Fix vxhs test to have stable certificate dir

The test suite has hardcoded /etc/pki/qemu as the cert dir, but this
only works if configure has --sysconfdir=/etc passed. We must set the
vxhs cert dir to a stable path in the test suite.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
7 years agoqemu: Add TLS support for Veritas HyperScale (VxHS)
Ashish Mittal [Wed, 30 Aug 2017 15:06:00 +0000 (11:06 -0400)]
qemu: Add TLS support for Veritas HyperScale (VxHS)

Alter qemu command line generation in order to possibly add TLS for
a suitably configured domain.

Sample TLS args generated by libvirt -

    -object tls-creds-x509,id=objvirtio-disk0_tls0,dir=/etc/pki/qemu,\
    endpoint=client,verify-peer=yes \
    -drive file.driver=vxhs,file.tls-creds=objvirtio-disk0_tls0,\
    file.vdisk-id=eb90327c-8302-4725-9e1b-4e85ed4dc251,\
    file.server.type=tcp,file.server.host=192.168.0.1,\
    file.server.port=9999,format=raw,if=none,\
    id=drive-virtio-disk0,cache=none \
    -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,\
    id=virtio-disk0

Update the qemuxml2argvtest with a couple of examples. One for a
simple case and the other a bit more complex where multiple VxHS disks
are added where at least one uses a VxHS that doesn't require TLS
credentials and thus sets the domain disk source attribute "tls = 'no'".

Update the hotplug to be able to handle processing the tlsAlias whether
it's to add the TLS object when hotplugging a disk or to remove the TLS
object when hot unplugging a disk.  The hot plug/unplug code is largely
generic, but the addition code does make the VXHS specific checks only
because it needs to grab the correct config directory and generate the
object as the command line would do.

Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agoqemu: Introduce qemuDomainPrepareDiskSource
John Ferlan [Wed, 30 Aug 2017 19:29:59 +0000 (15:29 -0400)]
qemu: Introduce qemuDomainPrepareDiskSource

Introduce a function to setup any TLS needs for a disk source.

If there's a configuration or other error setting up the disk source
for TLS, then cause the domain startup to fail.

For VxHS, follow the chardevTLS model where if the src->haveTLS hasn't
been configured, then take the system/global cfg->haveTLS setting for
the storage source *and* mark that we've done so via the tlsFromConfig
setting in storage source.

Next, if we are using TLS, then generate an alias into a virStorageSource
'tlsAlias' field that will be used to create the TLS object and added to
the disk object in order to link the two together for QEMU.

Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agoutil: Add TLS attributes to virStorageSource
Ashish Mittal [Wed, 30 Aug 2017 15:35:34 +0000 (11:35 -0400)]
util: Add TLS attributes to virStorageSource

Add an optional virTristateBool haveTLS to virStorageSource to
manage whether a storage source will be using TLS.

Sample XML for a VxHS disk:

<disk type='network' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source protocol='vxhs' name='eb90327c-8302-4725-9e1b-4e85ed4dc251' tls='yes'>
    <host name='192.168.0.1' port='9999'/>
  </source>
  <target dev='vda' bus='virtio'/>
</disk>

Additionally add a tlsFromConfig boolean to control whether the TLS
setting was due to domain configuration or qemu.conf global setting
in order to decide whether to Format the haveTLS setting for either
a live or saved domain configuration file.

Update the qemuxml2xmltest in order to add a test to show the proper
parsing.

Also update the docs to describe the tls attribute.

Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agodocs: Clean up the description for network disk protocol options
John Ferlan [Wed, 27 Sep 2017 13:42:33 +0000 (09:42 -0400)]
docs: Clean up the description for network disk protocol options

Clean up the description a bit to make it more readable and not
appear as one long run-on paragraph.

7 years agoconf: Introduce TLS options for VxHS block device clients
Ashish Mittal [Wed, 30 Aug 2017 15:32:33 +0000 (11:32 -0400)]
conf: Introduce TLS options for VxHS block device clients

Add a new TLS X.509 certificate type - "vxhs". This will handle the
creation of a TLS certificate capability for properly configured
VxHS network block device clients.

The following describes the behavior of TLS for VxHS block device:

  (1) Two new options have been added in /etc/libvirt/qemu.conf
      to control TLS behavior with VxHS block devices
      "vxhs_tls" and "vxhs_tls_x509_cert_dir".
  (2) Setting "vxhs_tls=1" in /etc/libvirt/qemu.conf will enable
      TLS for VxHS block devices.
  (3) "vxhs_tls_x509_cert_dir" can be set to the full path where the
      TLS CA certificate and the client certificate and keys are saved.
      If this value is missing, the "default_tls_x509_cert_dir" will be
      used instead. If the environment is not configured properly the
      authentication to the VxHS server will fail.

Signed-off-by: Ashish Mittal <Ashish.Mittal@veritas.com>
Signed-off-by: John Ferlan <jferlan@redhat.com>
7 years agonwfilter: Fix possible segfault on sometimes consumed variable
John Ferlan [Wed, 27 Sep 2017 14:06:50 +0000 (10:06 -0400)]
nwfilter: Fix possible segfault on sometimes consumed variable

The virNWFilterIPAddrMapAddIPAddr code can consume the @addr parameter
on success when the @ifname is found in the ipAddressMap->hashTable
hash table in the call to virNWFilterVarValueAddValue; however, if
not found in the hash table, then @addr is formatted into a @val
which is stored in the table and on return the caller would be
expected to free @addr.

Thus, the caller has no way to determine on success whether @addr was
consumed, so in order to fix this create a @tmp variable which will
be stored/consumed when virNWFilterVarValueAddValue succeeds. That way
the caller can free @addr whether the function returns success or failure.

7 years agorpc: for messages with FDs always decode count of FDs from the message
Pavel Hrdina [Tue, 26 Sep 2017 14:47:20 +0000 (16:47 +0200)]
rpc: for messages with FDs always decode count of FDs from the message

The packet with passed FD has the following format:

    --------------------------
    | len | header | payload |
    --------------------------

where "payload" has an additional count of FDs before the actual data:

    ------------------
    | nfds | payload |
    ------------------

When the packet is received we parse the "header", which as a side
effect updates msg->bufferOffset to point to the beginning of "payload".
If the message call contains FDs, we need to also parse the count of
FDs, which also updates the msg->bufferOffset.

The issue here is that when we attempt to read the FDs data from the
socket and we receive EAGAIN we finish the reading and call poll()
to wait for the data the we need.  When the data arrives we already have
the packet in our buffer so we read the "header" again but this time
we don't read the count of FDs because we already have it stored.

That means that the msg->bufferOffset is not updated to point to the
actual beginning of the payload data, but it points to the count of
FDs.  After all FDs are processed we dispatch the message to process
it and decode the payload.  Since the msg->bufferOffset points to wrong
data, we decode the wrong payload and the API call fails with
error messages:

    Domain not found: no domain with matching uuid '67656e65-7269-6300-0c87-5003ca6941f2' ()

Broken by commit 133c511b527 which fixed a FD and memory leak.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: domain: Extract common clearing of VM private data
Peter Krempa [Wed, 23 Aug 2017 12:19:36 +0000 (14:19 +0200)]
qemu: domain: Extract common clearing of VM private data

VM private data is cleared when the VM is turned off and also when the
VM object is being freed. Some of the clearing code was duplicated.
Extract it to a separate function.

This also removes the now unnecessary function
qemuDomainClearPrivatePaths.

7 years agodocs: Add the closing </address> tag for mdev example
Erik Skultety [Wed, 27 Sep 2017 13:08:53 +0000 (15:08 +0200)]
docs: Add the closing </address> tag for mdev example

Signed-off-by: Erik Skultety <eskultet@redhat.com>
7 years agoShrink volume even with ALLOCATE flag
Ján Tomko [Tue, 16 Aug 2016 10:29:05 +0000 (12:29 +0200)]
Shrink volume even with ALLOCATE flag

Calling fallocate on the new (smaller) capacity ensures
that the whole file is allocated, but it does not reduce
the file size.

Also call ftruncate after fallocate.

https://bugzilla.redhat.com/show_bug.cgi?id=1366446

7 years agovirStorageFileResize: fallocate the whole capacity
Ján Tomko [Mon, 25 Sep 2017 14:35:42 +0000 (16:35 +0200)]
virStorageFileResize: fallocate the whole capacity

We have been trying to implement the ALLOCATE flag to mean
"the volume should be fully allocated after the resize".

Since commit b0579ed9 we do not allocate from the existing
capacity, but from the existing allocation value.
However this value is a total of all the allocated bytes,
not an offset.

For a sparsely allocated file:
$ perl -e 'print "x"x8192;' > vol1
$ fallocate -p -o 0 -l 4096 vol1
$ virsh vol-info vol1 default
Capacity:       8.00 KiB
Allocation:     4.00 KiB

Treating allocation as an offset would result in an incompletely
allocated file:
$ virsh vol-resize vol1 --pool default 16384 --allocate
Capacity:       16.00 KiB
Allocation:     12.00 KiB

Call fallocate from zero on the whole requested capacity to fully
allocate the file. After that, the volume is fully allocated
after the resize:
$ virsh vol-resize vol1 --pool default 16384 --allocate
$ virsh vol-info vol1 default
Capacity:       16.00 KiB
Allocation:     16.00 KiB

7 years agouse virFileAllocate in virStorageFileResize
Ján Tomko [Mon, 25 Sep 2017 14:29:34 +0000 (16:29 +0200)]
use virFileAllocate in virStorageFileResize

Introduce a new function virFileAllocate that will call the
non-destructive variants of safezero, essentially reverting
my commit 1390c268
    safezero: fall back to writing zeroes even when resizing
back to the state as of commit 18f0316
    virstoragefile: Have virStorageFileResize use safezero

This means that _ALLOCATE flag will no longer work on platforms
without the allocate syscalls, but it will not overwrite data
either.

7 years agovirsh: Add/allow secret-uuid for pool-{define|create}-as
John Ferlan [Tue, 5 Sep 2017 17:44:15 +0000 (13:44 -0400)]
virsh: Add/allow secret-uuid for pool-{define|create}-as

https://bugzilla.redhat.com/show_bug.cgi?id=1476775

For the virsh pool-{define|create}-as command, let's allow using
--secret-uuid on the command line as an alternative to --secret-usage
(added for commit id '8932580'), but ensure that they are mutually
 exclusive.

7 years agonwfilter: Fix memory leak in learnIPAddressThread
ZhiPeng Lu [Wed, 27 Sep 2017 01:01:39 +0000 (09:01 +0800)]
nwfilter: Fix memory leak in learnIPAddressThread

Don't leak @inetaddr within the done: processing when attempting
to instantiate the filter.

Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
7 years agonwfilter: Fix memory leak in virNWFilterIPAddrMapAddIPAddr
ZhiPeng Lu [Wed, 27 Sep 2017 08:53:50 +0000 (16:53 +0800)]
nwfilter: Fix memory leak in virNWFilterIPAddrMapAddIPAddr

If virNWFilterHashTablePut fails, then the @val was leaked.

Signed-off-by: ZhiPeng Lu <lu.zhipeng@zte.com.cn>
7 years agoqemu: fix hotplug of udp device with no connect host
Ján Tomko [Tue, 26 Sep 2017 11:56:36 +0000 (13:56 +0200)]
qemu: fix hotplug of udp device with no connect host

Use an empty string to let qemu fill out the default.
This matches what's done in qemuBuildChrChardevStr.

https://bugzilla.redhat.com/show_bug.cgi?id=1454671

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
7 years agoRevert "vhost-user: add support reconnect for vhost-user ports"
Pavel Hrdina [Wed, 20 Sep 2017 13:59:18 +0000 (15:59 +0200)]
Revert "vhost-user: add support reconnect for vhost-user ports"

This reverts commit edaf4ebe95a5995585c8ab7bc5b92887286d4431.

This uses "reconnect" as attribute for <source> element, but we already
have a <reconnect> element for <source> element for chardev devices.

Since this is the same feature for different device it should be
presented in XML the same way.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
7 years agoqemu: process: Refresh data from qemu monitor after migration
Peter Krempa [Mon, 25 Sep 2017 14:16:08 +0000 (16:16 +0200)]
qemu: process: Refresh data from qemu monitor after migration

Some values we read from the qemu monitor may be changed with the actual
state by the incoming migration. This means that we should refresh
certain things only after the migration has finished.

This is mostly visible in the cdrom tray state, which is by default
closed but may be opened by the guest OS. This would be refreshed before
qemu transferred the actual state and thus libvirt would think that the
tray is closed.

Note that this patch moves only a few obvious query commands. Others may
be moved later after individual assessment.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1463168

7 years agoqemu: hotplug: Ignore cgroup errors when hot-unplugging vcpus
Peter Krempa [Mon, 25 Sep 2017 20:34:44 +0000 (22:34 +0200)]
qemu: hotplug: Ignore cgroup errors when hot-unplugging vcpus

When the vcpu is successfully removed libvirt would remove the cgroup.
In cases when removal of the cgroup fails libvirt would report an error.

This does not make much sense, since the vcpu was removed and we can't
really do anything with the cgroup. This patch silences the errors from
cgroup removal.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1462092

7 years agoqemu: adjust indentation of qemuDomainObjPrivateXMLFormatAutomaticPlacement
Ján Tomko [Tue, 26 Sep 2017 15:10:51 +0000 (17:10 +0200)]
qemu: adjust indentation of qemuDomainObjPrivateXMLFormatAutomaticPlacement

Commit 6801da94 fixed the typo in the function name, but forgot
to adjust the indentation level of the next line.

7 years agoqemu: domain: Fix typo in qemuDomainObjPtrivateXMLFormatAutomaticPlacement
Peter Krempa [Tue, 26 Sep 2017 14:36:48 +0000 (16:36 +0200)]
qemu: domain: Fix typo in qemuDomainObjPtrivateXMLFormatAutomaticPlacement

7 years agoconf: fix formatting of udp chardev attributes
Ján Tomko [Tue, 26 Sep 2017 11:30:10 +0000 (13:30 +0200)]
conf: fix formatting of udp chardev attributes

It is possible (although possibly not very useful) to leave out
the service attribute when using <source mode='bind'/>

Fix the formatter bug introduced by commit 4a0da34 and format
the host when its present (checked for non-NULL inside
virBufferEscapeString) instead of basing it on the presence
of the service attribute.

https://bugzilla.redhat.com/show_bug.cgi?id=1455825

7 years agoqemu: block: Use correct alias when extracting disk node names
Peter Krempa [Mon, 25 Sep 2017 09:44:00 +0000 (11:44 +0200)]
qemu: block: Use correct alias when extracting disk node names

The alias recorded in disk->info.alias is the alias for the frontend
device but we are interested in the backend drive. This messed up the
disk node name extraction code as qemu reports the drive alias in the
block query commands. This was broken in the node name detector
refactoring done in commit 0175dc6ea024d

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1494327

7 years agoqemu: block: Don't lookup node names if they are already known
Peter Krempa [Mon, 25 Sep 2017 09:39:55 +0000 (11:39 +0200)]
qemu: block: Don't lookup node names if they are already known

Move the check that skips node name detection if they are already
present earlier so that the hash table lookup is skipped.

7 years agoPrint hex values with '0x' prefix and octal with '0' in debug messages
Daniel P. Berrange [Mon, 25 Sep 2017 10:43:33 +0000 (11:43 +0100)]
Print hex values with '0x' prefix and octal with '0' in debug messages

Seeing a log message saying 'flags=93' is ambiguous & confusing unless
you happen to know that libvirt always prints flags as hex.  Change our
debug messages so that they always add a '0x' prefix when printing flags,
and '0' prefix when printing mode. A few other misc places gain a '0x'
prefix in error messages too.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
7 years agoapparmor: support ptrace checks
Jim Fehlig [Fri, 22 Sep 2017 23:02:42 +0000 (17:02 -0600)]
apparmor: support ptrace checks

Kernel 4.13 introduced finer-grained ptrace checks

https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit/?h=v4.13.2&id=290f458a4f16f9cf6cb6562b249e69fe1c3c3a07

With kernel 4.13 and apparmor 2.11, simply starting libvirtd
results in the following apparmor denial

type=AVC msg=audit(1506112085.645:954): apparmor="DENIED"
operation="ptrace" profile="/usr/sbin/libvirtd" pid=6984
comm="libvirtd" requested_mask="trace" denied_mask="trace"
peer="unconfined"

Attempting to start an unconfined domain results in

type=AVC msg=audit(1506112301.227:1112): apparmor="DENIED"
operation="ptrace" profile="/usr/sbin/libvirtd" pid=7498
comm="libvirtd" requested_mask="trace" denied_mask="trace"
peer="/usr/sbin/libvirtd"

And attempting to start a confined domain results in

type=AVC msg=audit(1506112631.408:1312): apparmor="DENIED"
operation="open" profile="virt-aa-helper" name="/etc/libnl/classid"
pid=8283 comm="virt-aa-helper" requested_mask="r" denied_mask="r"
fsuid=0 ouid=0
type=AVC msg=audit(1506112631.530:1319): apparmor="DENIED"
operation="open" profile="virt-aa-helper" name="/etc/libnl/classid"
pid=8289 comm="virt-aa-helper" requested_mask="r" denied_mask="r"
fsuid=0 ouid=0
type=AVC msg=audit(1506112632.186:1324): apparmor="DENIED"
operation="ptrace" profile="/usr/sbin/libvirtd" pid=8342
comm="libvirtd" requested_mask="trace" denied_mask="trace"
peer="libvirt-66154842-e926-4f92-92f0-1c1bf61dd1ff"

Add ptrace rules to allow the trace operations.

Resolves: https://bugzilla.suse.com/show_bug.cgi?id=1058847
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Guido Günther <agx@sigxcpu.org>
7 years agonews: remove kernel version reference from switchdev entry
Ján Tomko [Wed, 20 Sep 2017 13:23:47 +0000 (15:23 +0200)]
news: remove kernel version reference from switchdev entry

The functionality was added in 4.8, but due to a rename of
the DEVLINK_CMD_ESWITCH_GET constant in the kernel headers,
the headers from kernel 4.11 are required by the libvirt code.

Remove the reference from the news entry, since it could be
misleading.

7 years agoqemu: capabilities: Remove support for downstream-only QMP monitor backport
Peter Krempa [Wed, 20 Sep 2017 08:45:23 +0000 (10:45 +0200)]
qemu: capabilities: Remove support for downstream-only QMP monitor backport

Some distros (see diff) chose to backport QMP support rather than rebase
to newer version of qemu. As a hack they added the string 'libvirt' to
the qemu -help output. Remove this as downstream-only hacks should be
carried by downstream and not litter upstream.

This effectively reverts commit ff88cd590572277f10ecee4ebb1174d9b70fc0d7