]> git.ipfire.org Git - thirdparty/libvirt.git/log
thirdparty/libvirt.git
2 years agodocs: Document firmware format attribute
Andrea Bolognani [Tue, 14 Feb 2023 16:38:10 +0000 (17:38 +0100)] 
docs: Document firmware format attribute

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Add more firmware tests
Andrea Bolognani [Wed, 8 Feb 2023 17:47:39 +0000 (18:47 +0100)] 
tests: Add more firmware tests

These cover various scenarios related to firmware formats,
specifically ensuring that all the ways in which the user can
ask for a non-default format to be used work correctly.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Add support for QCOW2 format firmware
Andrea Bolognani [Tue, 7 Feb 2023 17:59:00 +0000 (18:59 +0100)] 
qemu: Add support for QCOW2 format firmware

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

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoconf: Accept QCOW2 firmware format
Andrea Bolognani [Fri, 27 Jan 2023 18:12:33 +0000 (19:12 +0100)] 
conf: Accept QCOW2 firmware format

All of the drivers will reject this value, at least for now.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Propagate firmware format
Andrea Bolognani [Tue, 31 Jan 2023 18:16:18 +0000 (19:16 +0100)] 
qemu: Propagate firmware format

Take the information from the descriptor and store it in the
domain definition. Various things, such as the arguments passed
to -blockdev and the path generated for the NVRAM file, will
then be based on it.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Filter firmwares based on format
Andrea Bolognani [Tue, 31 Jan 2023 16:46:58 +0000 (17:46 +0100)] 
qemu: Filter firmwares based on format

If the user has requested a specific firmware format, then
all firmware builds that are not in that format should be
ignored while looking for matches.

The legacy hardcoded firmware list predates firmware
descriptors and their "format" field, so we can safely
assume that all builds listed in there are in raw format.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agodrivers: Reject unsupported firmware formats
Andrea Bolognani [Tue, 7 Feb 2023 18:12:44 +0000 (19:12 +0100)] 
drivers: Reject unsupported firmware formats

This ensures that, as we add support for more formats at the
domain XML level, we don't accidentally cause drivers to
misbehave or users to get confused.

All existing drivers support the raw format, and supporting
additional formats will require explicit opt-in on the
driver's part.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoconf: Parse firmware format
Andrea Bolognani [Mon, 13 Feb 2023 17:13:23 +0000 (18:13 +0100)] 
conf: Parse firmware format

The default is raw, which corresponds to the historical
behavior and is also the only accepted value, at least for
now.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoconf: Change handling for empty NVRAM path
Andrea Bolognani [Tue, 31 Jan 2023 13:35:28 +0000 (14:35 +0100)] 
conf: Change handling for empty NVRAM path

Right now, this results in loader->nvram being NULL, which is
reasonable: loader->nvramTemplate is stored separately, so if
the <nvram> element doesn't contain a path there is really no
useful information inside it.

However, this is about to change, so we will find ourselves
needing to hold on to loader->nvram even when no path is
present. Change the firmware handling code so that such a
scenario is dealt with appropriately.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Introduce qemuFirmwareEnsureNVRAM()
Andrea Bolognani [Fri, 3 Feb 2023 18:21:03 +0000 (19:21 +0100)] 
qemu: Introduce qemuFirmwareEnsureNVRAM()

This helper replaces qemuDomainNVRAMPathFormat() and also
incorporates some common operations that all callers of that
helper needed.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Move qemuDomainNVRAMPathFormat() to qemu_firmware
Andrea Bolognani [Fri, 27 Jan 2023 14:49:36 +0000 (15:49 +0100)] 
qemu: Move qemuDomainNVRAMPathFormat() to qemu_firmware

There are no other callers remaining.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Move firmware selection from startup to postparse
Andrea Bolognani [Tue, 24 Jan 2023 16:01:48 +0000 (17:01 +0100)] 
qemu: Move firmware selection from startup to postparse

Currently, firmware selection is performed as part of the
domain startup process. This mostly works fine, but there's a
significant downside to this approach: since the process is
affected by factors outside of libvirt's control, specifically
the contents of the various JSON firmware descriptors and
their names, it's pretty much impossible to guarantee that the
outcome is always going to be the same. It would only take an
edk2 update, or a change made by the local admin, to render a
domain unbootable or downgrade its boot security.

To avoid this, move firmware selection to the postparse phase.
This way it will only be performed once, when the domain is
first defined; subsequent boots will not need to go through
the process again, as all the paths that were picked during
firmware selection are recorded in the domain XML.

Care is taken to ensure that existing domains are handled
correctly, even if their firmware configuration can't be
successfully resolved. Failure to complete the firmware
selection process is only considered fatal when defining a
new domain; in all other cases the error will be reported
during startup, as is already the case today.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoconf: Export virDomainDefOSValidate()
Andrea Bolognani [Thu, 26 Jan 2023 15:36:34 +0000 (16:36 +0100)] 
conf: Export virDomainDefOSValidate()

We're going to need it elsewhere very soon.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Add descriptors for QCOW2 format firmware builds
Andrea Bolognani [Fri, 27 Jan 2023 16:48:43 +0000 (17:48 +0100)] 
tests: Add descriptors for QCOW2 format firmware builds

Now that we ignore all firmwares that are not in raw format
while performing autoselection, we can have descriptors for
firmware builds in QCOW2 format without breaking anything.

Note that the descriptors are arranged so that they have the
highest priority on aarch64, but the lowest one on x86_64.
This matches the expectation that QCOW2 will quickly be
adopted as the default on aarch64, where its use produces
significant benefits in terms of memory usage, while x86_64
will likely stick with raw for the foreseeable future.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Don't pick firmware with unsupported format
Andrea Bolognani [Fri, 27 Jan 2023 16:39:25 +0000 (17:39 +0100)] 
qemu: Don't pick firmware with unsupported format

Right now, if the descriptor with the highest priority happens
to describe a firmware in a format other than raw, no domain
that uses autoselection will be able to start.

A better approach is to filter out descriptors that advertise
unsupported formats during autoselection.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Don't pick firmware that requires SMM when smm=off
Andrea Bolognani [Fri, 27 Jan 2023 16:22:24 +0000 (17:22 +0100)] 
qemu: Don't pick firmware that requires SMM when smm=off

At the moment, if SMM is explicitly disabled in the domain XML
but a firmware descriptor that requires SMM to be enabled has
the highest priority and otherwise matches the requirements,
we pick that firmware only to error out later, when the domain
is started.

A better approach is to take into account the fact that SMM is
disabled while performing autoselection, and ignore all
descriptors that advertise the requires-smm feature.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Clear os.firmwareFeatures after autoselection
Andrea Bolognani [Tue, 24 Jan 2023 18:38:37 +0000 (19:38 +0100)] 
qemu: Clear os.firmwareFeatures after autoselection

We already clear os.firmware, so it doesn't make sense to keep
the list of features around.

Moreover, our validation routines will reject an XML that
contains a list of firmware features but disables firmware
autoselection, so not clearing these means that the live XML
for a domain that uses feature-based autoselection can't be
fed back into libvirt.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Only fill nvramTemplate for local sources
Andrea Bolognani [Fri, 10 Feb 2023 18:43:53 +0000 (19:43 +0100)] 
qemu: Only fill nvramTemplate for local sources

It doesn't make sense for non-local sources, since we can't
create or reset the corresponding NVRAM file.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Add convenience local variables
Andrea Bolognani [Fri, 27 Jan 2023 16:35:30 +0000 (17:35 +0100)] 
qemu: Add convenience local variables

This makes the code more compact and less awkward.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoconf: Introduce virDomainLoaderDefNew()
Andrea Bolognani [Tue, 31 Jan 2023 16:05:44 +0000 (17:05 +0100)] 
conf: Introduce virDomainLoaderDefNew()

For now we just allocate the object, so the only advantage is
that invocations are shorter and look a bit nicer.

Later on, its introduction will pay off by letting us change
things in a single spot instead of all over the library.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoconf: Introduce virDomainLoaderDefParseXMLLoader()
Andrea Bolognani [Fri, 10 Feb 2023 15:42:11 +0000 (16:42 +0100)] 
conf: Introduce virDomainLoaderDefParseXMLLoader()

We already handle the <nvram> element in a separate helper,
which is cleaner than having all the logic in the top-level
virDomainLoaderDefParseXML() function.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Introduce qemuDomainDefBootPostParse()
Andrea Bolognani [Fri, 20 Jan 2023 16:13:00 +0000 (17:13 +0100)] 
qemu: Introduce qemuDomainDefBootPostParse()

Move all the boot related parts of qemuDomainDefPostParse()
to a separate helper.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Introduce qemuDomainDefMachinePostParse()
Andrea Bolognani [Fri, 20 Jan 2023 16:04:28 +0000 (17:04 +0100)] 
qemu: Introduce qemuDomainDefMachinePostParse()

Move all the machine type related parts of
qemuDomainDefPostParse() to a separate helper.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Add more firmware tests
Andrea Bolognani [Fri, 10 Feb 2023 16:40:29 +0000 (17:40 +0100)] 
tests: Add more firmware tests

These cover scenarios such as using the new, more verbose
format of the <nvram> element to point to a local path, mixing
firmware autoselection with non-local NVRAM files, and
explicitly disabling SMM when using firmware autoselection.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Enable qemuxml2xml for more firmware tests
Andrea Bolognani [Wed, 8 Feb 2023 18:15:55 +0000 (19:15 +0100)] 
tests: Enable qemuxml2xml for more firmware tests

Some of the test cases had only been added to the xml2argv
test program and not to the xml2xml one.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Unify input files for firmware tests
Andrea Bolognani [Wed, 8 Feb 2023 18:28:05 +0000 (19:28 +0100)] 
tests: Unify input files for firmware tests

Most of the differences, such as those in the domain name or
amount of memory, are fairly harmless, but they still make it
more cumbersome than necessary to directly compare different
input (and output) files.

More importantly, the use of unversioned machine types in some
of the test cases results in the descriptor-based autoselection
logic being effectively skipped, because the compatible machine
types as listed in them are only the versioned variants.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Move firmware tests to CAPS_LATEST
Andrea Bolognani [Wed, 8 Feb 2023 18:10:48 +0000 (19:10 +0100)] 
tests: Move firmware tests to CAPS_LATEST

This is already the case for the vast majority, but a few are
using explicit capabilities lists.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Use x86_64 for all x86 firmware tests
Andrea Bolognani [Wed, 8 Feb 2023 18:24:51 +0000 (19:24 +0100)] 
tests: Use x86_64 for all x86 firmware tests

Most test cases are on 64-bit architectures already, but there
are a couple of exceptions.

Right now this works, but it will no longer fly after some
upcoming changes. Prepare for those by switching away from
32-bit architectures.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Rename firmware-manual-efi-rw* tests
Andrea Bolognani [Thu, 26 Jan 2023 14:23:38 +0000 (15:23 +0100)] 
tests: Rename firmware-manual-efi-rw* tests

These test cases deal with EFI, not BIOS.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agotests: Set nvramDir in qemuxml2xmltest
Andrea Bolognani [Thu, 26 Jan 2023 17:33:22 +0000 (18:33 +0100)] 
tests: Set nvramDir in qemuxml2xmltest

We already do this in qemuxml2argvtest.

Right now setting this doesn't change anything, but it will
become relevant later.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agodocs: Fix documentation for loader.stateless attribute
Andrea Bolognani [Fri, 27 Jan 2023 15:44:43 +0000 (16:44 +0100)] 
docs: Fix documentation for loader.stateless attribute

It works exactly the other way around.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: Let virCommand module translate exitstatus
Michal Privoznik [Mon, 13 Feb 2023 11:35:28 +0000 (12:35 +0100)] 
qemu: Let virCommand module translate exitstatus

When starting (some) external helpers, callers of
qemuSecurityCommandRun() pass &exitstatus variable, to learn the
exit code of helper process (with qemuTPMEmulatorStart() being
the only exception). Then, if the status wasn't zero they produce
a generic error message, like:

  "Starting of helper process failed. exitstatus=%d"

or, in case of qemuPasstStart():

  "Could not start 'passt': %s"

This is needless as virCommandRun() (that's called under the
hood), can do both for us, if NULL was passed instead of
@exitstatus. Not only it appends exit status, it also reads
stderr of failed command producing comprehensive error message:

  Child process (${args}) unexpected exit status ${exitstatus}: ${stderr}

Therefore, pass NULL everywhere. But in contrast with one of
previous commits which removed @cmdret argument, there could be a
sensible caller which might want to process exit code. So keep
the argument for now and just pass NULL.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: Drop @cmdret argument from qemuSecurityCommandRun()
Michal Privoznik [Mon, 13 Feb 2023 11:27:49 +0000 (12:27 +0100)] 
qemu: Drop @cmdret argument from qemuSecurityCommandRun()

Every single caller of qemuSecurityCommandRun() calls the
function as:

  if (qemuSecurityCommandRun(..., &cmdret) < 0)
      goto cleanup;

  if (cmdret < 0)
      goto cleanup;

(modulo @exitstatus shenanigans)

Well, there's no need for such complication. There isn't a single
caller (and probably will never be (TM)), that would need to
distinguish the reason for the failure. Therefore,
qemuSecurityCommandRun() can be made to pass the retval of
virCommandRun() called under the hood.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: Don't overwrite error from qemuSecurityCommandRun()
Michal Privoznik [Mon, 13 Feb 2023 11:18:02 +0000 (12:18 +0100)] 
qemu: Don't overwrite error from qemuSecurityCommandRun()

The usual pattern when starting a helper daemon is:

  if (qemuSecurityCommandRun(..., &exitstatus, &cmdret) < 0)
      goto cleanup;

  if (cmdret < 0 || exitstatus != 0) {
      virReportError();
      goto cleanup;
  }

The only problem with this pattern is that if virCommandRun()
fails (i.e. cmdret < 0), then proper error was already reported.
But in this pattern we overwrite it (usually with less specific)
error.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu_slirp: Don't set errfd when starting slirp helper
Michal Privoznik [Mon, 20 Feb 2023 09:49:34 +0000 (10:49 +0100)] 
qemu_slirp: Don't set errfd when starting slirp helper

Way back, in v6.2.0-rc1~67 we removed the code that reads slirp's
stderr on failed startup. However, we forgot to remove
corresponding virCommandSetErrorFD() call and variable
declaration. Do that now.

While this may seem like a step in wrong direction (we should be
reading stderr as it may contain reason for failed start), this
is going to be handled in more general way in next commits.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agosecurity: Add support for SUSE edk2 firmware paths
Jim Fehlig [Thu, 23 Feb 2023 18:02:46 +0000 (11:02 -0700)] 
security: Add support for SUSE edk2 firmware paths

SUSE installs edk2 firmwares for both x86_64 and aarch64 in /usr/share/qemu.
Add support for this path in virt-aa-helper and allow locking files within
the path in the libvirt qemu abstraction.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agoqemu: domain: Unexport qemuDomainObjTaintMsg
Peter Krempa [Wed, 1 Mar 2023 16:03:56 +0000 (17:03 +0100)] 
qemu: domain: Unexport qemuDomainObjTaintMsg

The function is used only inside qemu_domain.c, unexport it and move it
above its user.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoqemu: domain: Fix logic when tainting domain
Peter Krempa [Wed, 1 Mar 2023 16:09:42 +0000 (17:09 +0100)] 
qemu: domain: Fix logic when tainting domain

Originally the code was skipping all repeated taints with the same taint
flag but a logic bug introduced in commit 30626ed15b239c424ae inverted
the condition. This caused that actually the first occurence was NOT
logged but any subsequent was.

This was noticed when going through oVirt logs as they use custom guest
agent commands and the logs are totally spammed with this message.

Fixes: 30626ed15b239c424ae891f096057a696eadd715
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoconf: domain: Add comment for 'virDomainObjTaint'
Peter Krempa [Wed, 1 Mar 2023 16:08:42 +0000 (17:08 +0100)] 
conf: domain: Add comment for 'virDomainObjTaint'

Outline what the function does, especially the return value.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoqemu: agent: Make fetching of 'can-offline' member from 'guest-query-vcpus' optional
Peter Krempa [Wed, 1 Mar 2023 15:51:42 +0000 (16:51 +0100)] 
qemu: agent: Make fetching of 'can-offline' member from 'guest-query-vcpus' optional

The 'can-offline' member is optional according to agent's schema and in
fact in certain cases it's not returned. Libvirt then spams the logs
if something is polling the bulk guest stats API.

Noticed when going through oVirt logs which appears to call the bulk
stats API repeatedly.

Instead of requiring it we simply reply that the vCPU can't be offlined.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoqemu: Align arguments correctly
Andrea Bolognani [Wed, 1 Mar 2023 17:48:43 +0000 (18:48 +0100)] 
qemu: Align arguments correctly

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
2 years agoci: Regenerate gitlab CI config with latest lcitool
Peter Krempa [Mon, 27 Feb 2023 11:34:47 +0000 (12:34 +0100)] 
ci: Regenerate gitlab CI config with latest lcitool

The latest 'lcitool' now generates the CI config in a way which
allows users to kick off pipelines with the upstream projects container
environment rather than building a throwaway updated environment each
time and enables a gitlab feature to time individual script lines.
Pull it into libvirt.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
2 years agoqemu_monitor: Decouple switch()-es in qemuMonitorJSONGetMemoryDeviceInfo()
Michal Privoznik [Mon, 27 Feb 2023 09:22:28 +0000 (10:22 +0100)] 
qemu_monitor: Decouple switch()-es in qemuMonitorJSONGetMemoryDeviceInfo()

There are two switch() statements over the same variable inside
of qemuMonitorJSONGetMemoryDeviceInfo(). Join them together into
one switch.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Kristina Hanicova <khanicov@redhat.com>
2 years agoqemu_monitor: Switch to virDomainMemoryModel enum in qemuMonitorJSONGetMemoryDeviceInfo()
Michal Privoznik [Mon, 27 Feb 2023 09:58:27 +0000 (10:58 +0100)] 
qemu_monitor: Switch to virDomainMemoryModel enum in qemuMonitorJSONGetMemoryDeviceInfo()

When processing memory devices (as a reply from QEMU), a bunch of
STREQ()-s is used. Fortunately, the set of strings we process is
the same as virDomainMemoryModel enum. Therefore, we can use
virDomainMemoryModelTypeFromString() and then use integer
comparison (well, switch()). This has an upside: introducing a
new memory model lets us see what places need adjusting
immediately at compile time.

NB, this is in contrast with cmd line generator
(qemuBuildMemoryDeviceProps()), where more specific models are
generated (e.g. "pc-dimm", "virtio-mem-pci", etc.). But QEMU
reports back the parent model, instead of specific child
instance.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Kristina Hanicova <khanicov@redhat.com>
2 years agolibvirt_private.syms: Export virDomainMemoryModelTypeFromString()
Michal Privoznik [Mon, 27 Feb 2023 09:31:43 +0000 (10:31 +0100)] 
libvirt_private.syms: Export virDomainMemoryModelTypeFromString()

The virDomainMemoryModelTypeFromString() is not exported, though
the enum translation functions are declared in
src/conf/domain_conf.h.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Kristina Hanicova <khanicov@redhat.com>
2 years agokbase: virtiofs: Add a note that virtiofs is not migratable
Peter Krempa [Mon, 27 Feb 2023 08:10:08 +0000 (09:10 +0100)] 
kbase: virtiofs: Add a note that virtiofs is not migratable

Note that certain operations will not work.

Resolves: https://gitlab.com/libvirt/libvirt/-/issues/452
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agoci: Regenerate gitlab config with latest lcitool
Peter Krempa [Mon, 27 Feb 2023 10:00:34 +0000 (11:00 +0100)] 
ci: Regenerate gitlab config with latest lcitool

The 'cirrus-run' and 'check-dco' containers are now exported as
':latest' instead of ':master'.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agoPost-release version bump to 9.2.0
Jiri Denemark [Wed, 1 Mar 2023 10:15:06 +0000 (11:15 +0100)] 
Post-release version bump to 9.2.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
2 years agoRelease of libvirt-9.1.0 v9.1.0
Jiri Denemark [Wed, 1 Mar 2023 10:10:41 +0000 (11:10 +0100)] 
Release of libvirt-9.1.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
2 years agoNEWS: Document my contributions for upcoming release
Michal Privoznik [Wed, 1 Mar 2023 08:38:29 +0000 (09:38 +0100)] 
NEWS: Document my contributions for upcoming release

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
2 years agoNEWS: Clarify limitations of passt support
Andrea Bolognani [Tue, 28 Feb 2023 21:32:35 +0000 (22:32 +0100)] 
NEWS: Clarify limitations of passt support

Let users know that we're working on lifting the limitations
and that they should not use the feature in production until
then.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoNEWS: Mention two user-visible bug fixes
Peter Krempa [Tue, 28 Feb 2023 16:22:32 +0000 (17:22 +0100)] 
NEWS: Mention two user-visible bug fixes

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agoNEWS: note new passt feature & bugfix for 9.1.0 release
Laine Stump [Mon, 27 Feb 2023 18:01:57 +0000 (13:01 -0500)] 
NEWS: note new passt feature & bugfix for 9.1.0 release

This also adds a sentence pointing out that SELinux must be disabled
in order for passt support to work. I didn't think to put that info in
the NEWS file last month when reporting the addition of passt support.

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agoTranslated using Weblate (Russian)
Sergey A [Mon, 27 Feb 2023 14:20:28 +0000 (15:20 +0100)] 
Translated using Weblate (Russian)

Currently translated at 89.6% (9338 of 10416 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ru/

Co-authored-by: Sergey A <sw@atrus.ru>
Signed-off-by: Sergey A. <sw@atrus.ru>
2 years agoTranslated using Weblate (Korean)
김인수 [Mon, 27 Feb 2023 14:20:28 +0000 (15:20 +0100)] 
Translated using Weblate (Korean)

Currently translated at 100.0% (10416 of 10416 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ko/

Co-authored-by: 김인수 <simmon@nplob.com>
Signed-off-by: 김인수 <simmon@nplob.com>
2 years agoqemu: Don't error out on 'unknown' memory model in qemuMonitorJSONGetMemoryDeviceInfo() v9.1.0-rc2
Michal Privoznik [Mon, 27 Feb 2023 09:23:12 +0000 (10:23 +0100)] 
qemu: Don't error out on 'unknown' memory model in qemuMonitorJSONGetMemoryDeviceInfo()

When starting QEMU (or when reconnecting to a running one),
qemuMonitorJSONGetMemoryDeviceInfo() is called to refresh info on
memory devices. In here, query-memory-devices is called which
returns info on all memory devices. The result is then iterated
over and for some memory models runtime information is updated.
The rest is to be ignored. Except, when introducing SGX support,
this was turned into an error leaving us unable to start any
domain with virtio-pmem memory device (as virtio-pmem is to be
ignored).

Fixes: ddb1bc051959eef4ad7ed6ac47b57056632bdb5e
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Kristina Hanicova <khanicov@redhat.com>
2 years agoTranslated using Weblate (Georgian)
Temuri Doghonadze [Sat, 25 Feb 2023 10:20:29 +0000 (11:20 +0100)] 
Translated using Weblate (Georgian)

Currently translated at 3.6% (376 of 10416 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ka/

Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2 years agoTranslated using Weblate (Ukrainian)
Yuri Chornoivan [Thu, 23 Feb 2023 17:20:29 +0000 (18:20 +0100)] 
Translated using Weblate (Ukrainian)

Currently translated at 100.0% (10416 of 10416 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/uk/

Co-authored-by: Yuri Chornoivan <yurchor@ukr.net>
Signed-off-by: Yuri Chornoivan <yurchor@ukr.net>
2 years agoUpdate translation files
Weblate [Wed, 22 Feb 2023 14:22:29 +0000 (15:22 +0100)] 
Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/

Co-authored-by: Weblate <noreply@weblate.org>
Signed-off-by: Fedora Weblate Translation <i18n@lists.fedoraproject.org>
2 years agopo: Refresh potfile for v9.1.0 v9.1.0-rc1
Jiri Denemark [Wed, 22 Feb 2023 14:16:26 +0000 (15:16 +0100)] 
po: Refresh potfile for v9.1.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
2 years agodocs/kbase: fix example for SEV validation
Daniel P. Berrangé [Thu, 16 Feb 2023 15:51:03 +0000 (15:51 +0000)] 
docs/kbase: fix example for SEV validation

The offline validation example needs to include the firmware path,
and is also missing line continuation markers.

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agorpm: add missing deps for the virt-qemu-sev-validate
Daniel P. Berrangé [Thu, 16 Feb 2023 14:57:56 +0000 (14:57 +0000)] 
rpm: add missing deps for the virt-qemu-sev-validate

The RPM automatic deps generator for python does not pick these up

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agodocs: refer to --firmware instead of --loader
Daniel P. Berrangé [Thu, 16 Feb 2023 14:55:11 +0000 (14:55 +0000)] 
docs: refer to --firmware instead of --loader

The --loader syntax was left over from an earlier version of the code
before it was renamed to --firmware.

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agoqemu: respond to NETDEV_STREAM_DISCONNECTED event
Laine Stump [Tue, 21 Feb 2023 06:16:04 +0000 (01:16 -0500)] 
qemu: respond to NETDEV_STREAM_DISCONNECTED event

When a QEMU netdev is of type "stream", if the socket it uses for
connectivity to the host network gets closed, then QEMU will send a
NETDEV_STREAM_DISCONNECTED event. We know that any stream netdev we've
created is backed by a passt process, and if the socket was closed,
that means the passt process has disappeared.

When we receive this event, we can respond by starting a new passt
process with the same options (including socket path) we originally
used. If we have previously created the stream netdev device with a
"reconnect" option, then QEMU will automatically reconnect to this new
passt process. (If we hadn't used "reconnect", then QEMU will never
try to reconnect to the new passt process, so there's no point in
starting it.)

Note that NETDEV_STREAM_DISCONNECTED is an event sent for the netdev
(ie "host side") of the network device, and so it sends the
"netdev-id" to specify which device was disconnected. But libvirt's
virDomainNetDef (the object used to keep track of network devices) is
the internal representation of both the host-side "netdev", and the
guest side device, and virDomainNetDef doesn't directly keep track of
the netdev-id, only of the device's "alias" (which is the "id"
parameter of the *guest* side of the device). Fortunately, by convention
libvirt always names the host-side of devices as "host" + alias, so in
order to search for the affected NetDef, all we need to do is trim the
1st 4 characters from the netdev-id and look for the NetDef having
that resulting trimmed string as its alias. (Contrast this to
NIC_RX_FILTER_CHANGED, which is an event received for the guest side
of the device, and so directly contains the device alias.)

Resolves: https://bugzilla.redhat.com/2172098
Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: add reconnect=5 to passt qemu commandline options when available
Laine Stump [Mon, 20 Feb 2023 23:26:51 +0000 (18:26 -0500)] 
qemu: add reconnect=5 to passt qemu commandline options when available

QEMU's "reconnect" option of "-netdev stream" tells QEMU to
periodically (period is given in seconds as an argument to the option)
attempt to reconnect to the same passt socket to which it had
originally connected to. This is useful in cases where the passt
process terminates, and libvirtd starts a new passt process in its
place (which doesn't happen yet, but will happen automatically after
an upcoming patch in this series).

Since there is no real hueristic for determining the "best" value of
the reconnect interval, rather than clutter up config with a knob that
nobody knows how to properly twiddle, we just set the reconnect timer
to 5 seconds.

"-netdev stream" first appeared in QEMU 7.2.0, but the reconnect
option won't be available until QEMU 8.0.0, so we need to check QEMU
capabilities just in case someone is using QEMU 7.2.0 (and thus can
support passt backend, but not reconnect)

Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: capabilities: Introduce QEMU_CAPS_NETDEV_STREAM_RECONNECT
Peter Krempa [Mon, 20 Feb 2023 16:25:08 +0000 (17:25 +0100)] 
qemu: capabilities: Introduce QEMU_CAPS_NETDEV_STREAM_RECONNECT

Detect that the 'stream' netdev backend supports reconnecting.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: remove extraneous error log when qemuPasstStart() fails during hotplug
Laine Stump [Tue, 21 Feb 2023 06:09:04 +0000 (01:09 -0500)] 
qemu: remove extraneous error log when qemuPasstStart() fails during hotplug

qemuPasstStart() already logs any error that occurs, so having the
caller log a generic error message only serves to obscure the actual
problem.

Fixes: a56f0168d576fa01cec204dc3c67d4d63ab8487f
Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu: add check for QEMU_CAPS_NETDEV_STREAM during validation
Laine Stump [Mon, 20 Feb 2023 20:14:23 +0000 (15:14 -0500)] 
qemu: add check for QEMU_CAPS_NETDEV_STREAM during validation

In commit 5af6134e I had added a new capability that is true if QEMU
allows "-netdev stream", but somehow neglected to actually check it in
commit a56f0168d when hooking up passt support to qemu. This isn't
catastrophic, since QEMU itself will still report an error, but that
error isn't as easy to understand as a libvirt-generated error.

Fixes: a56f0168d576fa01cec204dc3c67d4d63ab8487f
Signed-off-by: Laine Stump <laine@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agoqemu_passt: Remove passt socket file on exit
Stefano Brivio [Tue, 21 Feb 2023 19:19:07 +0000 (20:19 +0100)] 
qemu_passt: Remove passt socket file on exit

Just like it can't remove its own PID files, passt can't unlink its
own socket upon exit (unless the initialisation fails), because it
has no access to the filesystem at runtime.

Remove the socket file in qemuPasstKill().

Fixes: a56f0168d576 ("qemu: hook up passt config to qemu domains")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoTranslated using Weblate (Georgian)
Temuri Doghonadze [Tue, 21 Feb 2023 11:15:17 +0000 (12:15 +0100)] 
Translated using Weblate (Georgian)

Currently translated at 3.5% (367 of 10405 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ka/

Translated using Weblate (Georgian)

Currently translated at 2.1% (223 of 10405 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ka/

Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2 years agoqemu: forbid updating any attributes of an interface <backend> with update-device
Laine Stump [Wed, 15 Feb 2023 20:29:56 +0000 (15:29 -0500)] 
qemu: forbid updating any attributes of an interface <backend> with update-device

Changing any of the attributes of an <interface>'s <backend> would
require removing and re-adding the interface for the new setting to
take effect, so fail any update-device that changes anything in
<backend>

Resolves: https://bugzilla.redhat.com/2169245
Signed-off-by: Laine Stump <laine@redhat.com>
2 years agoNEWS: document external memory snapshot bug fixes
Pavel Hrdina [Tue, 21 Feb 2023 16:19:13 +0000 (17:19 +0100)] 
NEWS: document external memory snapshot bug fixes

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
2 years agoqemu_snapshot: refactor qemuSnapshotDeleteExternalPrepare
Pavel Hrdina [Tue, 21 Feb 2023 15:52:28 +0000 (16:52 +0100)] 
qemu_snapshot: refactor qemuSnapshotDeleteExternalPrepare

When user creates external snapshot with making only memory snapshot
without any disks deleting that snapshot failed without reporting any
meaningful error.

The issue is that the qemuSnapshotDeleteExternalPrepare function
returns NULL because the returned list is empty. This will not change
so to make it clear if the function fails or not return int instead and
have another parameter where we can pass the list.

With the fixed memory snapshot deletion it will now correctly delete
memory only snapshot as well.

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

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
2 years agoqemu_snapshot: remove memory snapshot when deleting external snapshot
Pavel Hrdina [Tue, 21 Feb 2023 15:10:56 +0000 (16:10 +0100)] 
qemu_snapshot: remove memory snapshot when deleting external snapshot

When deleting external snapshot we should remove the memory snapshot
file as well.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
2 years agoqemu: fix reconnect of unix socket is wrong
Zhenguo Yao [Thu, 16 Feb 2023 02:48:37 +0000 (10:48 +0800)] 
qemu: fix reconnect of unix socket is wrong

'reconnect' parameter doesn't pass to qemu properly when
hotplug vhost-user device to vm. Fix this by making
'reconnect' to get correct value.

Signed-off-by: Zhenguo Yao <yaozhenguo1@gmail.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
2 years agoNEWS: Document new pvpanic-pci device
Kristina Hanicova [Tue, 21 Feb 2023 16:37:52 +0000 (17:37 +0100)] 
NEWS: Document new pvpanic-pci device

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agodocs: document panic device 'pvpanic-pci'
Kristina Hanicova [Mon, 20 Feb 2023 16:12:59 +0000 (17:12 +0100)] 
docs: document panic device 'pvpanic-pci'

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agotests: add case for pvpanic-pci without address
Kristina Hanicova [Mon, 20 Feb 2023 16:12:58 +0000 (17:12 +0100)] 
tests: add case for pvpanic-pci without address

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agoqemu: assign PCI address to device pvpanic-pci
Kristina Hanicova [Mon, 20 Feb 2023 16:12:57 +0000 (17:12 +0100)] 
qemu: assign PCI address to device pvpanic-pci

It makes sense to accept pvpanic-pci also without specified PCI
address and assign one if possible.

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

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agotests: add test cases for device pvpanic-pci
Kristina Hanicova [Mon, 20 Feb 2023 16:12:56 +0000 (17:12 +0100)] 
tests: add test cases for device pvpanic-pci

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agoconf: add panic model 'pvpanic'
Kristina Hanicova [Mon, 20 Feb 2023 16:12:55 +0000 (17:12 +0100)] 
conf: add panic model 'pvpanic'

This patch introduces optional device pvpanic-pci, validates its
address and generates command line.

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agoqemu: introduce QEMU_CAPS_DEVICE_PANIC_PCI
Kristina Hanicova [Mon, 20 Feb 2023 16:12:54 +0000 (17:12 +0100)] 
qemu: introduce QEMU_CAPS_DEVICE_PANIC_PCI

This capability detects the availability of the pvpanic-pci
device that is required in order to use pvpanic on Arm (original
pvpanic is an emulated ISA device, for which Arm does not have
support).

Signed-off-by: Kristina Hanicova <khanicov@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
2 years agotests: qemucapabilitiesdata: Update for the qemu-8.0 development cycle
Peter Krempa [Fri, 6 Jan 2023 08:54:32 +0000 (09:54 +0100)] 
tests: qemucapabilitiesdata: Update for the qemu-8.0 development cycle

Update to v7.2.0-1550-g79b677d658:

Notable changes:
 - the 'stream' netdev backend supports 'reconnect'
 - 'ide-cf' device added
 - 'sgx-aex-notify' and 'sgx-edeccssa' cpu properties added
 - 'pvrdma' device added
 - 'qio-channel-rdma' channel added
 - 'query-audiodevs` command added
 - block graph info changes
   - added specific information for 'file' node ('extent-size-hint')
   - format specific info for 'vmdk' nodes changed
 - 'query-migrationthreads' command added
 - deprecated 'sga' device removed
 - deprecated 'password' option of SPICE protocol removed
 - deprecated 'section-size' property of return value of 'query-sgx'
   removed
 - 'x-early-migration' property for 'virtio-mem' added
 - 'x-native-hotplug' renamed to 'x-do-not-expose-native-hotplug-cap'

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoTranslated using Weblate (Georgian)
Temuri Doghonadze [Tue, 21 Feb 2023 05:20:48 +0000 (06:20 +0100)] 
Translated using Weblate (Georgian)

Currently translated at 2.1% (223 of 10405 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ka/

Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2 years agoRemove unused member `upstream` from virDomainNetBackend
Martin Kletzander [Tue, 21 Feb 2023 09:31:45 +0000 (10:31 +0100)] 
Remove unused member `upstream` from virDomainNetBackend

It was used briefly and subsequently removed in 3592b81c4c71.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agodocs: Convert 404 page to rST
Martin Kletzander [Tue, 21 Feb 2023 06:57:31 +0000 (07:57 +0100)] 
docs: Convert 404 page to rST

There is no markup equivalent for any of the <s/> or <del/> HTML tags, so this
is the only thing I came up with and it looks like it works.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
2 years agosyntax-check: Ensure Python is called via env(1)
Andrea Bolognani [Mon, 20 Feb 2023 10:12:44 +0000 (11:12 +0100)] 
syntax-check: Ensure Python is called via env(1)

The syntax-check rule that calls flake8 on Python scripts
expects this to be the case, and it's the best practice anyway.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
2 years agodocs: Recommend better python3 shebang
Andrea Bolognani [Mon, 20 Feb 2023 10:14:27 +0000 (11:14 +0100)] 
docs: Recommend better python3 shebang

Python scripts should always invoked the interpreter through
env(1) to ensure that they work on macOS and the BSDs, and at
this point not explicitly asking for Python 3 doesn't really
make sense.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
2 years agodocs/html: Properly generate ACL permissions into API reference
Peter Krempa [Fri, 17 Feb 2023 21:47:34 +0000 (22:47 +0100)] 
docs/html: Properly generate ACL permissions into API reference

The 'newapi.xsl' stylesheet was referencing non-existing paths to the
XML files holding ACL permission flags for individual APIs. Additionally
the 'document()' XSL function doesn't even allow concatenation of the
path as it was done via '{$builddir}/src..', but requires either direct
argument or use of the 'concat()' function.

This meant that the 'acls' variable was always empty and thus none of
our API documentation was actually generated with the 'acl' section.

Fix it by passing the path to the XML via an argument to the stylesheet
as the files differ based on which document is being generated.

Since the 'admin' API does not have ACL we need to handle it separately
now in the build system.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agogendispatch: Add proper XML header to ACL permissions XML file
Peter Krempa [Mon, 20 Feb 2023 08:42:58 +0000 (09:42 +0100)] 
gendispatch: Add proper XML header to ACL permissions XML file

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agodocs: ACL: Mention the ACL object name along with the corresponding libvirt object...
Peter Krempa [Fri, 17 Feb 2023 15:48:35 +0000 (16:48 +0100)] 
docs: ACL: Mention the ACL object name along with the corresponding libvirt object name

It's not trivial to figure out the ACL object name from our
documentation. Add it above the table outlining existing permissions.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agodocs: Fix generated names for ACL objects
Peter Krempa [Mon, 20 Feb 2023 10:31:11 +0000 (11:31 +0100)] 
docs: Fix generated names for ACL objects

Both the object name and permission name in ACL use '-' instead of '_'
separator when referring to them in the docs or even when used inside of
polkit. Unfortunately the generators used for generating our docs don't
honour this in certain cases which would result in broken names in the
API docs (once they will be generated).

Rename both object and permission name to use dash and reflect that in
the anchor names in the documentation.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoTranslated using Weblate (Georgian)
Temuri Doghonadze [Sun, 19 Feb 2023 16:20:23 +0000 (17:20 +0100)] 
Translated using Weblate (Georgian)

Currently translated at 1.7% (185 of 10405 strings)

Translation: libvirt/libvirt
Translate-URL: https://translate.fedoraproject.org/projects/libvirt/libvirt/ka/

Co-authored-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
Signed-off-by: Temuri Doghonadze <temuri.doghonadze@gmail.com>
2 years agoselinux: Don't ignore ENOENT in Permissive mode
Michal Privoznik [Mon, 20 Sep 2021 11:02:37 +0000 (13:02 +0200)] 
selinux: Don't ignore ENOENT in Permissive mode

In selinux driver there's virSecuritySELinuxSetFileconImpl()
which is responsible for actual setting of SELinux label on given
file and handling possible failures. In fhe failure handling code
we decide whether failure is fatal or not. But there is a bug:
depending on SELinux mode (Permissive vs. Enforcing) the ENOENT
is either ignored or considered fatal. This not correct - ENOENT
must always be fatal for couple of reasons:

- In virSecurityStackTransactionCommit() the seclabels are set
  for individual secdrivers (e.g. SELinux first and then DAC),
  but if one secdriver succeeds and another one fails, then no
  rollback is performed for the successful one leaking remembered
  labels.

- QEMU would fail opening the file anyways (if neither of
  secdrivers reported error and thus cancelled domain startup)

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2004850
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agoselinux: Swap two blocks handling setfilecon_raw() failure
Michal Privoznik [Mon, 20 Sep 2021 10:21:04 +0000 (12:21 +0200)] 
selinux: Swap two blocks handling setfilecon_raw() failure

In virSecuritySELinuxSetFileconImpl() we have code that handles
setfilecon_raw() failure. The code consists of two blocks: one
for dealing with shared filesystem like NFS (errno is ENOTSUP or
EROFS) and the other block that's dealing with EPERM for
privileged daemon. Well, the order of these two blocks is a bit
confusing because the comment above them mentions the NFS case
but EPERM block follows. Swap these two blocks to make it less
confusing.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agoqemu_passt: Let passt write the PID file
Michal Privoznik [Thu, 16 Feb 2023 10:46:55 +0000 (11:46 +0100)] 
qemu_passt: Let passt write the PID file

The way we start passt currently is: we use
virCommandSetPidFile() to use our virCommand machinery to acquire
the PID file and leak opened FD into passt. Then, we use
virPidFile*() APIs to read the PID file (which is needed when
placing it into CGroups or killing it). But this does not fly
really because passt daemonizes itself. Thus the process we
started dies soon and thus the PID file is closed and unlocked.

We could work around this by passing '--foreground' argument, but
that weakens passt as it can't create new PID namespace (because
it doesn't fork()).

The solution is to let passt write the PID file, but since it
does not lock the file and closes it as soon as it is written, we
have to switch to those virPidFile APIs which don't expect PID
file to be locked.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoqemu_passt: Deduplicate passt killing code
Michal Privoznik [Thu, 16 Feb 2023 11:07:42 +0000 (12:07 +0100)] 
qemu_passt: Deduplicate passt killing code

There are two places where we kill passt:

1) qemuPasstStop() - called transitively from qemuProcessStop(),
2) qemuPasstStart() - after failed start.

Now, the code from 2) lack error preservation (so if there's
another error during cleanup we might overwrite the original
error). Therefore, move the internals of qemuPasstStop() into a
separate function and call it from both places.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoqemu_passt: Report passt's error on failed start
Michal Privoznik [Thu, 16 Feb 2023 11:19:26 +0000 (12:19 +0100)] 
qemu_passt: Report passt's error on failed start

When starting passt, it may write something onto its stderr
(convincing it to print even more is addressed later). Pass this
string we read to user.

Since we're not daemonizing passt anymore (see previous commit),
we can let virCommand module do all the heavy lifting and switch
to virCommandSetErrorBuffer() instead of reading error from an
FD.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agoqemu_passt: Avoid double daemonizing passt
Michal Privoznik [Thu, 16 Feb 2023 11:00:58 +0000 (12:00 +0100)] 
qemu_passt: Avoid double daemonizing passt

When passt is started, it daemonizes itself by default. There's
no point in having our virCommand module daemonize it too.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agodocs: ACL: Show which permissions are allowed for unauthenticated connections
Peter Krempa [Fri, 17 Feb 2023 15:31:20 +0000 (16:31 +0100)] 
docs: ACL: Show which permissions are allowed for unauthenticated connections

Certain APIs are allowed also without authentication but the ACL page
didn't outline which. Generate a new column with the information.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>