]> git.ipfire.org Git - thirdparty/libvirt.git/log
thirdparty/libvirt.git
2 years agoqemuxml2argvtest: Convert 'sparc-minimal' case to DO_TEST_CAPS_ARCH_LATEST
Peter Krempa [Thu, 2 Mar 2023 15:53:47 +0000 (16:53 +0100)] 
qemuxml2argvtest: Convert 'sparc-minimal' case to DO_TEST_CAPS_ARCH_LATEST

Convert the only outstanding test case for a 'sparc' machine to modern
test infrastructure.

'sparc' machine type also needs to be added to the list of supported
arches in testQemuGetLatestCaps.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuTestCapsCacheInsert*: Directly insert real capabilities
Peter Krempa [Thu, 2 Mar 2023 16:59:09 +0000 (17:59 +0100)] 
qemuTestCapsCacheInsert*: Directly insert real capabilities

Real capabilities populate the binary name, while fake don't. We can
directly insert the capabilities using the real binary name.

This will allow to remove 'qemu_emulators' entries once all tests are
converted to real capabilties.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuTestCapsCacheInsert*: Drop the file cache rather than poisoning it
Peter Krempa [Thu, 2 Mar 2023 16:44:21 +0000 (17:44 +0100)] 
qemuTestCapsCacheInsert*: Drop the file cache rather than poisoning it

Make callers use virFileCacheClear to clear the cache before populating
it rather than trying to overwrite what's in it.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuxml2argvtest: Fix serial-unix-missing-source case
Peter Krempa [Thu, 2 Mar 2023 16:50:07 +0000 (17:50 +0100)] 
qemuxml2argvtest: Fix serial-unix-missing-source case

Use x86_64 emulator and machine and remove the nocaps version of the
test.

Fixes: 80a37e96a95
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoutil: virfilecache: Introduce virFileCacheClear for usage in tests
Peter Krempa [Thu, 2 Mar 2023 16:32:28 +0000 (17:32 +0100)] 
util: virfilecache: Introduce virFileCacheClear for usage in tests

In tests we need to be able to populate the cache with a deterministic
set of entries. This means we need to drop the contents of the cache
between runs to prevent spillage between test cases.

virFileCacheClear drops all entries from the hash table used for the
cache.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agotests: qemu: Move testing of default cache and disk source with space to 'sata-device'
Peter Krempa [Thu, 2 Mar 2023 12:15:50 +0000 (13:15 +0100)] 
tests: qemu: Move testing of default cache and disk source with space to 'sata-device'

Integrate the two special cases used for schema testing into the more
useful qemuxml2argvtest, whose input data is still tested against the
schema.

Add also a xml output variant.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agotests: domainschemadata: Drop redundant tests
Peter Krempa [Thu, 2 Mar 2023 09:43:01 +0000 (10:43 +0100)] 
tests: domainschemadata: Drop redundant tests

The schema tested by removed test cases is tested by other, more useful,
test cases:

 - 'maxMemory'
    - qemuxmlargvdata/memory-hotplug*
 - 'backingChains'
    - qemuxmlargvdata/disk-backing-chains*
 - 'timers'
    - qemuxml2argvdata/kvm-pit-delay.xml
    - qemuxml2argvdata/clock-catchup.xml
 - 'qemu-simple-description-title.xml'
    - 'qemuxml2argvdata/minimal.xml

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agotests: Undo recent breakages
Andrea Bolognani [Mon, 6 Mar 2023 14:25:22 +0000 (15:25 +0100)] 
tests: Undo recent breakages

Turns out that those overrides I recently removed where actually
there for a reason, and there was a motivation behind creating
the driver config as unprivileged too O:-)

Until a solution that can both ensure predictable output and
avoid code duplication is developed, go back to the previous
approach.

Fixes: 2f56f69f7f7e ("tests: Create privileged config for QEMU driver")
Fixes: 0f49b6cc6b81 ("tests: Drop no longer necessary overrides")
Fixes: 0b464cd84ff3 ("tests: Drop more QEMU driver config overrides")
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
2 years agotests: Drop more QEMU driver config overrides
Andrea Bolognani [Thu, 2 Mar 2023 18:05:53 +0000 (19:05 +0100)] 
tests: Drop more QEMU driver config overrides

These are allegedly necessary to keep the output consistent,
but now that we're using a privileged config for the driver we
get the desired behavior out of the box, and as a bonus the
paths match what you would actually see on a regular host.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Set SASLdirs to default values
Andrea Bolognani [Thu, 2 Mar 2023 19:40:55 +0000 (20:40 +0100)] 
tests: Set SASLdirs to default values

We use standard paths for almost everything else.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Set TLSx509certdirs to default values
Andrea Bolognani [Thu, 2 Mar 2023 17:34:19 +0000 (18:34 +0100)] 
tests: Set TLSx509certdirs to default values

For almost all directories, the value we set matches the one
a standard deployment would use, but in a couple of cases they
deviate from that. Keep things consistent.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Set more TLSx509certdirs
Andrea Bolognani [Thu, 2 Mar 2023 17:35:31 +0000 (18:35 +0100)] 
tests: Set more TLSx509certdirs

We were missing a couple.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Move more QEMU driver settings to common code
Andrea Bolognani [Thu, 2 Mar 2023 17:31:00 +0000 (18:31 +0100)] 
tests: Move more QEMU driver settings to common code

None of these settings is specific to the xml2argv test. Moving
them to the common code ensures the behavior of the QEMU driver
is consistent across all QEMU tests.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Add convenience variable for QEMU driver config
Andrea Bolognani [Thu, 2 Mar 2023 18:48:23 +0000 (19:48 +0100)] 
tests: Add convenience variable for QEMU driver config

This makes the code less clunky.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Drop no longer necessary overrides
Andrea Bolognani [Thu, 2 Mar 2023 17:11:35 +0000 (18:11 +0100)] 
tests: Drop no longer necessary overrides

Creating a privileged config ensures these are already set
correctly.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Create privileged config for QEMU driver
Andrea Bolognani [Thu, 2 Mar 2023 16:59:01 +0000 (17:59 +0100)] 
tests: Create privileged config for QEMU driver

Our QEMU test suite effectively covers the qemu:///system
scenario, and we have to partially replace the unprivileged
config with its privileged equivalent after the fact to keep up
the illusion.

Instead of jumping through these extra hoops, we can simply
start with a privileged configuration matching the privileged
driver we're creating for test programs.

This change highlights that we were missing a couple of
overrides, specifically in the tests for passt and dbus. Now
that we're creating a privileged config, this kind of issue
shouldn't be able to slip into the test suite.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Set the QEMU driver as privileged in common code
Andrea Bolognani [Thu, 2 Mar 2023 16:54:19 +0000 (17:54 +0100)] 
tests: Set the QEMU driver as privileged in common code

Most test programs were already doing this, and moving it to
the common code ensures we see consistent behavior across all
QEMU tests.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Limit use of TLSx509secretUUIDs
Andrea Bolognani [Mon, 6 Mar 2023 12:43:01 +0000 (13:43 +0100)] 
tests: Limit use of TLSx509secretUUIDs

These are intended to be used for just a few specific tests,
but since we don't always free them up afterwards they could
end up accidentally affecting subsequent tests as well.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Limit use of SPICE TLS
Andrea Bolognani [Thu, 2 Mar 2023 19:23:37 +0000 (20:23 +0100)] 
tests: Limit use of SPICE TLS

Follow the example of other similar settings and only enable it
for the few test cases that are actually about the specific
functionality, disabling it immediately afterwards.

A few test cases that were completely unrelated to SPICE TLS no
longer see the effects of having the feature enabled.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Increase scope for SASLdirs
Andrea Bolognani [Thu, 2 Mar 2023 19:07:44 +0000 (20:07 +0100)] 
tests: Increase scope for SASLdirs

Just like TLSx509certdirs, these can be set throughout the
lifetime of the test program.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Drop unnecessary free
Andrea Bolognani [Thu, 2 Mar 2023 18:34:40 +0000 (19:34 +0100)] 
tests: Drop unnecessary free

The various TLSx509certdirs can be set throughout the lifetime
of the test program without issue.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Drop unnecessary configuration overrides
Andrea Bolognani [Thu, 2 Mar 2023 19:38:24 +0000 (20:38 +0100)] 
tests: Drop unnecessary configuration overrides

They are not used by the specific test.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agotests: Poison more XDG variables
Andrea Bolognani [Thu, 2 Mar 2023 16:59:06 +0000 (17:59 +0100)] 
tests: Poison more XDG variables

We use these in QEMU command lines, so we should poison them
to catch test suite issues.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agoutil: json: Remove unused virJSONValueObjectAppendStringPrintf
Peter Krempa [Mon, 6 Mar 2023 09:09:19 +0000 (10:09 +0100)] 
util: json: Remove unused virJSONValueObjectAppendStringPrintf

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuBuildHostNetProps: Append aliases without virJSONValueObjectAppendStringPrintf
Peter Krempa [Mon, 6 Mar 2023 08:58:23 +0000 (09:58 +0100)] 
qemuBuildHostNetProps: Append aliases without virJSONValueObjectAppendStringPrintf

Format aliases into temporary strings and append them using
virJSONValueObjectAdd.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuBuildHostNetProps: Append ipv6 address using virJSONValueObjectAdd
Peter Krempa [Mon, 6 Mar 2023 08:56:42 +0000 (09:56 +0100)] 
qemuBuildHostNetProps: Append ipv6 address using virJSONValueObjectAdd

The 'ipv6-prefix' and 'ipv6-prefixlen' fields can be directly added
using virJSONValueObjectAdd rather than by two separate calls.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuBuildChannelGuestfwdNetdevProps: Don't use virJSONValueObjectAppendStringPrintf
Peter Krempa [Mon, 6 Mar 2023 08:46:40 +0000 (09:46 +0100)] 
qemuBuildChannelGuestfwdNetdevProps: Don't use virJSONValueObjectAppendStringPrintf

Use virJSONValueObjectAdd and format the string directly via
g_strdup_printf. In the end virJSONValueObjectAppendStringPrintf will be
removed.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuBuildHostNetProps: Don't use virJSONValueObjectAppendStringPrintf to format address
Peter Krempa [Mon, 6 Mar 2023 08:40:24 +0000 (09:40 +0100)] 
qemuBuildHostNetProps: Don't use virJSONValueObjectAppendStringPrintf to format address

Prefer virJSONValueObjectAdd which we already use internally combined
with local formatting of the string.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuBuildHostNetProps: Report proper errors for unhandled interface types
Peter Krempa [Mon, 6 Mar 2023 08:18:51 +0000 (09:18 +0100)] 
qemuBuildHostNetProps: Report proper errors for unhandled interface types

VIR_DOMAIN_NET_TYPE_NULL and VIR_DOMAIN_NET_TYPE_VDS are not implemented
for the qemu driver but the formatter code in 'qemuBuildHostNetProps'
didn't report an error for them and didn't even return from the function
when they were encountered.

This caused a crash in 'virJSONValueObjectAppendStringPrintf' which
does not tolerate NULL JSON object to append to when the unsupported
devices were used.

Properly report error when unhandled devices are encountered. This also
includes the case for VIR_DOMAIN_NET_TYPE_HOSTDEV, but that code path
should never be reached.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2175582
Fixes: bac6b266fb6a / 6457619d186
Fixes: 0225483adce
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoexamples: systemtap: Update to linux-6.3 (rc1)
Peter Krempa [Mon, 6 Mar 2023 10:17:42 +0000 (11:17 +0100)] 
examples: systemtap: Update to linux-6.3 (rc1)

The 'vmsa' struct was moved out of 'struct vcpu_svm' into the 'sev_es'
sub-struct in linux commit:

  commit b67a4cc35c9f726999fa29880713ce72d4e39e8d
  Author: Peter Gonda <pgonda@google.com>
  Date:   Thu Oct 21 10:42:59 2021 -0700

      KVM: SEV: Refactor out sev_es_state struct

      Move SEV-ES vCPU metadata into new sev_es_state struct from vcpu_svm.

Also update the line reference to have more margin.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agoexamples: systemtap: Warn users to properly update 'amd-sev-es-vmsa.stp'
Peter Krempa [Mon, 6 Mar 2023 10:16:32 +0000 (11:16 +0100)] 
examples: systemtap: Warn users to properly update 'amd-sev-es-vmsa.stp'

The script references a very specific line in the kernel source code and
a very specific struct. Further changes to the kernel are likely going
to break it. Set the expectations by adding a warning to the reader.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
2 years agoqemu: Use '-machine acpi=on/off' instead of deprecated '-no-acpi'
Peter Krempa [Mon, 27 Feb 2023 11:46:13 +0000 (12:46 +0100)] 
qemu: Use '-machine acpi=on/off' instead of deprecated '-no-acpi'

QEMU deprecated the '-no-acpi' option, thus we should switch to the
modern way to use '-machine'.

Certain ARM machine types don't support ACPI. Given our historically
broken design of using '<acpi/>' without attribute to enable ACPI and
qemu's default of enabling it without '-no-acpi' such configurations
would not work.

Now when qemu reports whether given machine type supports ACPI we can do
a better decision and un-break those configs. Unfortunately not
retroactively.

Resolves: https://gitlab.com/libvirt/libvirt/-/issues/297
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: capabilities: Introduce virQEMUCapsMachineSupportsACPI
Peter Krempa [Mon, 27 Feb 2023 14:44:57 +0000 (15:44 +0100)] 
qemu: capabilities: Introduce virQEMUCapsMachineSupportsACPI

The helper returns the 'acpi' flag for a given machine type.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: capabilities: Extract whether machine type supports ACPI
Peter Krempa [Mon, 27 Feb 2023 13:45:47 +0000 (14:45 +0100)] 
qemu: capabilities: Extract whether machine type supports ACPI

The return data from 'query-machines' now contains an 'acpi' field. If
the field is present we can use it to decide how to handle user's
setting of '<acpi/>' domain feature.

Add logic to extract the 'acpi' field and store it in machine type list
along with other properties.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: capabilities: Refactor XML parsing in virQEMUCapsLoadMachines
Peter Krempa [Mon, 27 Feb 2023 13:45:06 +0000 (14:45 +0100)] 
qemu: capabilities: Refactor XML parsing in virQEMUCapsLoadMachines

Use the appropriate virXMLProp* helpers.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agotests: qemucapabilitiesdata: Update capabilities for the qemu-8.0 dev cycle on x86_64
Peter Krempa [Wed, 1 Mar 2023 11:57:17 +0000 (12:57 +0100)] 
tests: qemucapabilitiesdata: Update capabilities for the qemu-8.0 dev cycle on x86_64

Update to v7.2.0-2146-g2946e1af27

Notable changes:

 - 'acpi' field in 'query-machines' added
 - 'SapphireRapids(-v1)' cpu model added
 - 'fsrs', 'fsrc', 'fzrm' cpu features added and available via TCG
 - 'fsrm' feature can be now emulated by qemu
 - 'smm-enabled' property added to 'ICH9-LPC' device
 - 'luks-any' encryption type for RBD blockdev backend and way to
    specify encryption options for parent image via 'parent'
 - 'xen-event-inject', 'xen-event-list' commands added
 - 'xen-xenstore', 'xen-gnttab', 'xen-evtchn', 'xen-overlay',
   'xen-platform'
 - 'i2c-echo' device added

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: capabilities: Retire unused QEMU_CAPS_IOTHREAD_POLLING
Peter Krempa [Thu, 23 Feb 2023 09:13:20 +0000 (10:13 +0100)] 
qemu: capabilities: Retire unused QEMU_CAPS_IOTHREAD_POLLING

We now always assume support for polling mode of iothreads.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: Always assume support for QEMU_CAPS_IOTHREAD_POLLING
Peter Krempa [Thu, 23 Feb 2023 09:09:46 +0000 (10:09 +0100)] 
qemu: Always assume support for QEMU_CAPS_IOTHREAD_POLLING

iothread polling mode and the corresponding properties were added in
qemu-2.9 ( 0d9d86fb4df4882b ). We can always assume that qemu supports
them.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: capabilities: Retire unused QEMU_CAPS_OBJECT_IOTHREAD
Peter Krempa [Thu, 23 Feb 2023 08:57:24 +0000 (09:57 +0100)] 
qemu: capabilities: Retire unused QEMU_CAPS_OBJECT_IOTHREAD

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemu: Always assume support for iothreads
Peter Krempa [Thu, 23 Feb 2023 08:28:25 +0000 (09:28 +0100)] 
qemu: Always assume support for iothreads

iothreads were introduced in qemu-2.0 and can't be compiled out thus we
can always assume qemu supports them.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agotests: qemuxml2argvdata: Remove irrelevant <disk> from 'iothread-*' cases
Peter Krempa [Tue, 28 Feb 2023 14:35:12 +0000 (15:35 +0100)] 
tests: qemuxml2argvdata: Remove irrelevant <disk> from 'iothread-*' cases

Remove disks which are not necessary to demonstrate iothread config.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuxml2argvtest: Modernize negative cputune-* cases
Peter Krempa [Thu, 23 Feb 2023 08:21:41 +0000 (09:21 +0100)] 
qemuxml2argvtest: Modernize negative cputune-* cases

Use latest caps for the tests even though the original test case didn't
need any capabilities.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuxml2(argv|xmltest): Simplify testing of scheduler settings
Peter Krempa [Thu, 23 Feb 2023 08:07:50 +0000 (09:07 +0100)] 
qemuxml2(argv|xmltest): Simplify testing of scheduler settings

Remove the cputune-iothreads, cputune-iothreadsched-zeropriority,
cputune-iothreadsched test files by moving the relevant elements into
the cputune case as we can setup scheduler settings for multiple objects
and thus test everything in one go.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuxml2(argv|xml)test: Modernize 'cputune' test cases
Peter Krempa [Wed, 22 Feb 2023 14:57:47 +0000 (15:57 +0100)] 
qemuxml2(argv|xml)test: Modernize 'cputune' test cases

Use DO_TEST_CAPS_LATEST for cputune-numatune, cputune-zero-shares,
cputune, and vcpu-placement-static cases. Do the necessary tweaks to
work with actual data.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuxml2xmltest: Modernize iothread CWW/SCSI test cases
Peter Krempa [Wed, 22 Feb 2023 14:37:52 +0000 (15:37 +0100)] 
qemuxml2xmltest: Modernize iothread CWW/SCSI test cases

The argv counterparts are already modernized.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuxml2argvtest: Modernize the rest of 'iohtreads-*'
Peter Krempa [Wed, 22 Feb 2023 14:23:04 +0000 (15:23 +0100)] 
qemuxml2argvtest: Modernize the rest of 'iohtreads-*'

Use DO_TEST_CAPS_LATEST for the basic tests. The emulator needed to be
tweaked to work with the real caps data.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuxml2(argv|xml)test: Remove 'iothreads' case
Peter Krempa [Wed, 22 Feb 2023 14:16:24 +0000 (15:16 +0100)] 
qemuxml2(argv|xml)test: Remove 'iothreads' case

'iothreads-disk' covers everything that 'iothreads' did in addition to
actually using the iothread.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoqemuxml2argvtest: Remove 'iothreads-nocap'
Peter Krempa [Wed, 22 Feb 2023 14:10:07 +0000 (15:10 +0100)] 
qemuxml2argvtest: Remove 'iothreads-nocap'

All supported QEMU versions now support iothreads thus upcoming patches
will be removing the capability checks. Remove the 'iothreads-nocap'
case which will become invalid.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoconf: virDomainDiskDefDriverParseXML: Drop unused XPath infrastructure
Peter Krempa [Thu, 23 Feb 2023 15:05:42 +0000 (16:05 +0100)] 
conf: virDomainDiskDefDriverParseXML: Drop unused XPath infrastructure

The function doesn't use XPath at all. Don't pass the context to it.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agogendispatch: Drop 'aclapi' mode
Peter Krempa [Tue, 21 Feb 2023 14:57:01 +0000 (15:57 +0100)] 
gendispatch: Drop 'aclapi' mode

The separate API perms XML is no longer used. Remove the support for
generating it.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agodocs|access: Don't build the ACL flags into a separate XML
Peter Krempa [Tue, 21 Feb 2023 14:54:36 +0000 (15:54 +0100)] 
docs|access: Don't build the ACL flags into a separate XML

Since we now build it into the libvirt-api.xml or equivalents we don't
need the extra XML files.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agodocs/newapi.xsl: Take API flag data from libvirt-api.xml rather than access/libvirt...
Peter Krempa [Tue, 21 Feb 2023 14:05:44 +0000 (15:05 +0100)] 
docs/newapi.xsl: Take API flag data from libvirt-api.xml rather than access/libvirt-access.xml

Since now we embed the data in the libvirt API we don't need to source
it from the extra document.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoscripts/apibuild: Extract and format API ACLs
Peter Krempa [Tue, 21 Feb 2023 13:20:09 +0000 (14:20 +0100)] 
scripts/apibuild: Extract and format API ACLs

As an additional step before processing the API parse the protocol file
and extract all ACL definitions. This way we can distribute them for any
user of the libvirt API XML files. We will be also able to avoid another
call to gendispatch, which generates all this data into a standalone
XML.

The remote procedure to API name is inspired by what rpcgen does.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoapibuild: Add infrastructure for generating ACL flag info into function docs
Peter Krempa [Tue, 21 Feb 2023 13:06:02 +0000 (14:06 +0100)] 
apibuild: Add infrastructure for generating ACL flag info into function docs

If the user of the 'docBuilder' class provides a dict (key is API name,
value is a tuple of arrays (acls, aclfilters), use the dict to generate
ACL definitions into the function definition.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agoremote_protocol: Fix list of supported ACL object names
Peter Krempa [Tue, 21 Feb 2023 13:04:54 +0000 (14:04 +0100)] 
remote_protocol: Fix list of supported ACL object names

Add missing and fix spelling of existing ones.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
2 years agosrc: Document virDomainInterfaceStats() limitation
Michal Privoznik [Mon, 6 Mar 2023 08:56:52 +0000 (09:56 +0100)] 
src: Document virDomainInterfaceStats() limitation

For unmanaged ethernet <interface/>, it is user's responsibility
to set up the interface. And as such it can be just anything.
Therefore, it's (almost) impossible for the
virDomainInterfaceStats() API to tell whether RX/TX values need
to be swapped or copied verbatim into the return structure.
Document this limitation.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agoconf: Make macvtap ethernet share host view
Michal Privoznik [Wed, 1 Mar 2023 10:05:49 +0000 (11:05 +0100)] 
conf: Make macvtap ethernet share host view

When fetching stats for a domain's <interface/>, or when setting
up its QoS, we can face two situations:

1) the device "shares" the host view, meaning each packet
   sent/received on the interface by a domain is accounted for in
   the same category on the host, or

2) the device is at the other side, and a packet send by a
   domain, is in fact packet received on the host.

This fact affects whether we need to swap RX/TX values when
fetching stats, or setting up QoS. We have this convenient helper
function (virDomainNetTypeSharesHostView()), which returns to
which category given interface type falls into.

Now, for unmanaged type='ethernet' our options are quite limited,
because it's user's responsibility to set up the host side of the
interface. And it can be just anything. Fortunately, we have
another convenience function (virNetDevMacVLanIsMacvtap()), which
determines whether given interface is a macvtap (which is
notoriously known for falling into the first category).
Let's use it to help virDomainNetTypeSharesHostView() determine
the view more accurately.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2175449
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
2 years agoqemu: Remove duplicate user/group lookup
Andrea Bolognani [Wed, 1 Mar 2023 17:57:29 +0000 (18:57 +0100)] 
qemu: Remove duplicate user/group lookup

Commit 068efae5b1a9 created a copy of this code instead of
simply moving it.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
2 years agotests: Print fakerootdir when it's preserved
Andrea Bolognani [Wed, 1 Mar 2023 10:11:23 +0000 (11:11 +0100)] 
tests: Print fakerootdir when it's preserved

Setting the LIBVIRT_SKIP_CLEANUP environment variable results
in the contents of fakerootdir being preserved for inspection.
Be more helpful towards the developer and print out the path
in this case.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agotests: Move fakerootdir handling to common logic
Andrea Bolognani [Wed, 1 Mar 2023 10:06:14 +0000 (11:06 +0100)] 
tests: Move fakerootdir handling to common logic

Instead of having each test manually initialize and cleanup
its own fakerootdir, do that as part of the common test
initialization logic in virTestMain().

In most cases we can simply drop the relevant code from the
test program, but scsihosttest uses the value of fakerootdir
as a starting point to build another path, so we need to do
things slightly differently. In order to keep things working,
we retrieve the value from the LIBVIRT_FAKE_ROOT_DIR
environment variable, same as all the mock libraries are
already doing.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agotests: Adopt fakerootdir helpers
Andrea Bolognani [Wed, 1 Mar 2023 09:52:14 +0000 (10:52 +0100)] 
tests: Adopt fakerootdir helpers

Most replacements are completely straightforward but
vircgrouptest requires slightly different handling because,
instead of initializing a single fakerootdir at the start of
the test program and cleaning it up at the end, it creates
multiple different ones one after the other.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agotests: Introduce helpers for fakerootdir handling
Andrea Bolognani [Wed, 1 Mar 2023 09:39:44 +0000 (10:39 +0100)] 
tests: Introduce helpers for fakerootdir handling

We have this logic open-coded all over the test suite. Provide
proper helpers implementing it.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Laine Stump <laine@redhat.com>
2 years agonews: Document support for QCOW2 format firmware
Andrea Bolognani [Tue, 14 Feb 2023 16:40:49 +0000 (17:40 +0100)] 
news: Document support for QCOW2 format firmware

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
2 years agonews: Document changes to firmware autoselection
Andrea Bolognani [Tue, 14 Feb 2023 16:46:11 +0000 (17:46 +0100)] 
news: Document changes to firmware autoselection

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
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>