]> git.ipfire.org Git - thirdparty/libvirt.git/log
thirdparty/libvirt.git
5 weeks agotlscert: Don't force 'keyEncipherment' for ECDSA and ECDH
Peter Krempa [Tue, 17 Jun 2025 13:01:26 +0000 (15:01 +0200)] 
tlscert: Don't force 'keyEncipherment' for ECDSA and ECDH

Per RFC8813 [1] which amends RFC5580 [2] ECDSA, ECDH, and ECMQV
algorithms must not have 'keyEncipherment' present, but our code did
check it. Add exemption for known algorithms which don't use it.

[1] https://datatracker.ietf.org/doc/rfc8813/
[2] https://datatracker.ietf.org/doc/rfc5480

Closes: https://gitlab.com/libvirt/libvirt/-/issues/691
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
5 weeks agostorage: disk: Properly handle partition numbers separated by 'p'
Peter Krempa [Tue, 17 Jun 2025 08:42:52 +0000 (10:42 +0200)] 
storage: disk: Properly handle partition numbers separated by 'p'

The 'p' separator for partitions is now common also for NVMe devices.
Fix the algorithm to extract the partition number to always consider it.

The fix is based on suggestion in the issue mentioned below.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/239
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
5 weeks agostorage: parthelper: Use if/else instead of ternary operator
Peter Krempa [Tue, 17 Jun 2025 08:29:05 +0000 (10:29 +0200)] 
storage: parthelper: Use if/else instead of ternary operator

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
5 weeks agovirshPrintJobProgress: Don't rewrite migration status line on non-terminals
Peter Krempa [Tue, 17 Jun 2025 08:00:20 +0000 (10:00 +0200)] 
virshPrintJobProgress: Don't rewrite migration status line on non-terminals

On non-terminals print each progress report on a new line. Fix based on
suggestion in the issue report.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/756
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
5 weeks agovirQEMUCapsFindBinary: Refactor local variables
Peter Krempa [Fri, 6 Jun 2025 10:32:37 +0000 (12:32 +0200)] 
virQEMUCapsFindBinary: Refactor local variables

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
5 weeks agostorage_file_probe: Use named initializer for 'struct FileTypeInfo'
Peter Krempa [Thu, 23 Nov 2023 16:28:16 +0000 (17:28 +0100)] 
storage_file_probe: Use named initializer for 'struct FileTypeInfo'

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
5 weeks agosecurity_manager: Don't leak seclabel in virSecurityManagerGenLabel()
Michal Privoznik [Mon, 16 Jun 2025 10:05:24 +0000 (12:05 +0200)] 
security_manager: Don't leak seclabel in virSecurityManagerGenLabel()

When a domain is being started, seclabels are generated for it.
This is handled in virSecurityManagerGenLabel() which can either
find pre-existing seclabel in domain def or generate a new one.
At any rate, domainGenSecurityLabel() callback is called and if
it fails then the seclabel is removed from domain definition
using VIR_DELETE_ELEMENT(). While this shrinks down the seclabels
array, it does not free individual item. It has to be freed
manually.

80 bytes in 2 blocks are definitely lost in loss record 1,359 of 1,876
   at 0x484CEF3: calloc (vg_replace_malloc.c:1675)
   by 0x4F19B29: g_malloc0 (in /usr/lib64/libglib-2.0.so.0.8200.5)
   by 0x49E4953: virSecurityLabelDefNew (virseclabel.c:59)
   by 0x4BDE0A4: virSecurityManagerGenLabel (security_manager.c:638)
   by 0xBA029B7: qemuProcessPrepareDomain (qemu_process.c:6760)
   by 0xBA07DF2: qemuProcessStart (qemu_process.c:8369)
   by 0xB93DAC0: qemuDomainObjStart (qemu_driver.c:6371)
   by 0xB93DE08: qemuDomainCreateWithFlags (qemu_driver.c:6420)
   by 0xB93DE86: qemuDomainCreate (qemu_driver.c:6438)
   by 0x4CECEA8: virDomainCreate (libvirt-domain.c:7142)

Now, you might think this may lead to a double free, because
@seclabel is freed under the 'cleanup' label (if @generated is
true). But if @generated is true, then just before calling the
callback there's VIR_APPEND_ELEMENT() which clears @seclabel out
turning the free under 'cleanup' label into a NOP.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
5 weeks agoTranslated using Weblate (Italian)
Salvatore Cocuzza [Mon, 16 Jun 2025 17:43:02 +0000 (17:43 +0000)] 
Translated using Weblate (Italian)

Currently translated at 22.4% (2448 of 10925 strings)

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

Signed-off-by: Salvatore Cocuzza <info@salvatorecocuzza.it>
5 weeks agoTranslated using Weblate (Greek)
Jim Spentzos [Mon, 16 Jun 2025 17:43:02 +0000 (17:43 +0000)] 
Translated using Weblate (Greek)

Currently translated at 1.2% (138 of 10925 strings)

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

Signed-off-by: Jim Spentzos <jimspentzos2000@gmail.com>
Translated using Weblate (Greek)

Currently translated at 1.2% (137 of 10925 strings)

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

Signed-off-by: Jim Spentzos <jimspentzos2000@gmail.com>
Translated using Weblate (Greek)

Currently translated at 1.2% (136 of 10925 strings)

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

Signed-off-by: Jim Spentzos <jimspentzos2000@gmail.com>
5 weeks agoTranslated using Weblate (Croatian)
Edmon Begoli [Mon, 16 Jun 2025 17:43:01 +0000 (17:43 +0000)] 
Translated using Weblate (Croatian)

Currently translated at 0.1% (3 of 10925 strings)

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

Signed-off-by: Edmon Begoli <ebegoli@gmail.com>
5 weeks agoTranslated using Weblate (Korean)
김인수 [Mon, 16 Jun 2025 17:43:01 +0000 (17:43 +0000)] 
Translated using Weblate (Korean)

Currently translated at 100.0% (10925 of 10925 strings)

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

Signed-off-by: 김인수 <simmon@nplob.com>
Translated using Weblate (Korean)

Currently translated at 99.9% (10922 of 10925 strings)

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

Signed-off-by: 김인수 <simmon@nplob.com>
5 weeks agoTranslated using Weblate (Italian)
Andrea Morelli [Mon, 16 Jun 2025 17:43:00 +0000 (17:43 +0000)] 
Translated using Weblate (Italian)

Currently translated at 22.3% (2440 of 10925 strings)

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

Signed-off-by: Andrea Morelli <morelliandrea973@gmail.com>
Translated using Weblate (Italian)

Currently translated at 22.2% (2436 of 10925 strings)

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

Signed-off-by: Andrea Morelli <morelliandrea973@gmail.com>
Translated using Weblate (Italian)

Currently translated at 22.0% (2413 of 10925 strings)

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

Signed-off-by: Andrea Morelli <morelliandrea973@gmail.com>
Translated using Weblate (Italian)

Currently translated at 21.9% (2398 of 10925 strings)

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

Signed-off-by: Andrea Morelli <morelliandrea973@gmail.com>
Translated using Weblate (Italian)

Currently translated at 21.5% (2350 of 10925 strings)

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

Signed-off-by: Andrea Morelli <morelliandrea973@gmail.com>
5 weeks agoqemu: Be more forgiving when acquiring QUERY job when formatting domain XML
Michal Privoznik [Mon, 16 Jun 2025 08:28:37 +0000 (10:28 +0200)] 
qemu: Be more forgiving when acquiring QUERY job when formatting domain XML

In my previous commit of v11.0.0-rc1~115 I've made QEMU driver
implementation for virDomainGetXMLDesc() (qemuDomainGetXMLDesc())
acquire QERY job. See its commit message for more info. But this
unfortunately broke apps witch fetch domain XML for incoming
migration (like virt-manager). The reason is that for incoming
migration the VIR_ASYNC_JOB_MIGRATION_IN async job is set, but
the mask of allowed synchronous jobs is empty (because QEMU can't
talk on monitor really). This makes virDomainObjBeginJob() fail
which in turn makes qemuDomainGetXMLDesc() fail too.

It makes sense for qemuDomainGetXMLDesc() to acquire the job
(e.g. so that it's coherent with another thread that might be in
the middle of a MODIFY job). But failure to dump XML may be
treated as broken daemon (e.g. virt-manager does so).

Therefore, still try to acquire the QUERY job (if job mask
permits it) but, do not treat failure as an error.

Fixes: 6cc93bf28842526be2fd596a607ebca796b7fb2e
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2369243
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
6 weeks agoNEWS: Mention cacert parameter in esx driver
Martin Kletzander [Mon, 9 Jun 2025 14:22:59 +0000 (16:22 +0200)] 
NEWS: Mention cacert parameter in esx driver

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agoesx: Allow specifying different CA bundle for remote connections
Martin Kletzander [Mon, 9 Jun 2025 13:40:12 +0000 (15:40 +0200)] 
esx: Allow specifying different CA bundle for remote connections

Add new URI parameter which allows for using non-system CA certificates
to verify remote peers.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agovirsh: await: Introduce 'guest-agent-available' condition
Peter Krempa [Wed, 4 Jun 2025 07:48:40 +0000 (09:48 +0200)] 
virsh: await: Introduce 'guest-agent-available' condition

The new condition allows waiting for the guest agent to show up, which
usually means that the guest has booted enough to respond to external
stimuli.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agovirsh: Introduce 'await' command for waiting until target domain state is reached
Peter Krempa [Thu, 27 Jan 2022 13:12:49 +0000 (14:12 +0100)] 
virsh: Introduce 'await' command for waiting until target domain state is reached

The new command is meant as syntax sugar for event handling which blocks
virsh until the requested state condition is reached.

The initial implementation adds a condition 'domain-inactive' returning
if the domain is/becomes inactive for whatever reason.

This command is useful for simple scripts e.g. for debugging libvirt
when it allows responding to target state in shell without the need to
fuss too much with polling or writing handlers around 'virsh event'.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agovsh: Add support for commands with more return values
Peter Krempa [Tue, 3 Jun 2025 15:25:36 +0000 (17:25 +0200)] 
vsh: Add support for commands with more return values

Add a new handler callback for command handlers which will want to
return more than just EXIT_SUCCESS/EXIT_FAILURE.

The new handler allows returning integers. Any negative values are
converted to EXIT_FAILURE, other values are returned as reported in
cases where we forward the command state (non-interactive usage) as
return value of the virt shell program.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agovshCommandRun: Convert to directly return the exit code
Peter Krempa [Tue, 3 Jun 2025 15:18:02 +0000 (17:18 +0200)] 
vshCommandRun: Convert to directly return the exit code

Currently the handler functions in the virt shells return only a boolean
signalling if the command was successful or not. In preparation for a
command which will want to return another value (timeout) convert
vshCommand run to actually return the requested exit code instead and
document the conversion from boolean.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agovirsh: cmdEvent: Ensure that event callbacks are unregistered before returning
Peter Krempa [Thu, 5 Jun 2025 05:52:03 +0000 (07:52 +0200)] 
virsh: cmdEvent: Ensure that event callbacks are unregistered before returning

Successful return from 'virConnectDomainEventDeregisterAny' does not
guarantee that there aren't still in-progress events being handled by
the callbacks. Since 'cmdEvent' passes in a slice from an array as the
private data of the callbacks, we must ensure that the array stays in
scope (it's auto-freed) for the whole time there are possible callbacks
being executed.

While in practice this doesn't happen as the callbacks are usually quick
enough to finish while unregistering stuff, placing a 'sleep(1)' into
e.g. 'virshEventLifecyclePrint' and starting a domain results in crash
of virsh with the following backtrace:

 Program terminated with signal SIGSEGV, Segmentation fault.
 #0  0x00005557b5cfd343 in virshEventPrintf (data=data@entry=0x5557db9619b0, fmt=fmt@entry=0x5557b5d5e527 "%s") at ../../../libvirt/tools/virsh-domain-event.c:252

 Thread 2 (Thread 0x7f59a54b7d00 (LWP 2097121)):
 #0  0x00007f59a6cadbf9 in __futex_abstimed_wait_common () at /lib64/libc.so.6
 #1  0x00007f59a6cb2cf3 in __pthread_clockjoin_ex () at /lib64/libc.so.6
 #2  0x00005557b5cd57f6 in virshDeinit (ctl=0x7ffc7b615140) at ../../../libvirt/tools/virsh.c:408
 #3  0x00005557b5cd5391 in main (argc=<optimized out>, argv=<optimized out>) at ../../../libvirt/tools/virsh.c:932

 Thread 1 (Thread 0x7f59a51a66c0 (LWP 2097122)):
 #0  0x00005557b5cfd343 in virshEventPrintf (data=data@entry=0x5557db9619b0, fmt=fmt@entry=0x5557b5d5e527 "%s") at ../../../libvirt/tools/virsh-domain-event.c:252
 #1  0x00005557b5cffa10 in virshEventPrint (data=0x5557db9619b0, buf=0x7f59a51a55c0) at ../../../libvirt/tools/virsh-domain-event.c:290
 #2  virshEventLifecyclePrint (conn=<optimized out>, dom=<optimized out>, event=<optimized out>, detail=<optimized out>, opaque=0x5557db9619b0) at ../../../libvirt/
 [snipped]

From the backtrace you can see that the 'main()' thread is already
shutting down virsh, which means that 'cmdEvent' terminated and the
private data was freed. The event loop thread is still execing the
callback which accesses the data.

To fix this add a condition and wait on all of the callbacks to be
unregistered first (their private data freeing function will be called).

This bug was observed when I've copied the event code for a new virsh
command which had a bit more involved callbacks.

Fixes: 99fa96c3907
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agovirthread: Add infrastructure for static virCond definitions
Peter Krempa [Wed, 4 Jun 2025 19:59:12 +0000 (21:59 +0200)] 
virthread: Add infrastructure for static virCond definitions

Add the automatic cleanup handler as well as static initializer to allow
simple stack allocated conditions.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agovirthread: Register auto cleanup function for virMutex
Peter Krempa [Wed, 4 Jun 2025 19:56:25 +0000 (21:56 +0200)] 
virthread: Register auto cleanup function for virMutex

This makes it very convenient to declare a mutex on stack along with the
VIR_MUTEX_INITIALIZE macro without the need to have complex cleanup.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agodocs: Note that zero detection on migration sparsifies image only when discard='unmap...
Peter Krempa [Thu, 5 Jun 2025 13:12:40 +0000 (15:12 +0200)] 
docs: Note that zero detection on migration sparsifies image only when discard='unmap' is set

The mirroring job clears the destination to ensure that the guest
visible disk contents are identical to the state on the source. The
image itself is kept sparse only when the disk 'discard' option is set
to 'unmap' (Also the disks would eventually desparsify itself anyways
with disabled discards). Note it in the docs for the user.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Acked-by: Eric Blake <eblake@redhat.com>
6 weeks agoRevert "docs: Add warning about using a cleared image with VIR_MIGRATE_PARAM_MIGRATE_...
Peter Krempa [Thu, 5 Jun 2025 12:42:46 +0000 (14:42 +0200)] 
Revert "docs: Add warning about using a cleared image with VIR_MIGRATE_PARAM_MIGRATE_DISKS_DETECT_ZEROES_ZEROES"

QEMU clears the images even when sparse mode is required so asking the
users to do so is not needed. Remove the docs.

This reverts commit 332ee4931a84ec23e7f6fcb963083318c1307dc7

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Acked-by: Eric Blake <eblake@redhat.com>
6 weeks agoqemu.conf: Improve docs for 'dynamic_ownership' option
Peter Krempa [Fri, 6 Jun 2025 08:02:23 +0000 (10:02 +0200)] 
qemu.conf: Improve docs for 'dynamic_ownership' option

Add a note that the user/group can be overriden or relabelling disabled
using per-vm/disk <seclabel> elements instead of disabling it globally.

Add a note that read-only image labels are not restored.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/512
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
6 weeks agostorage: Implement a simple 'checkPool' method for 'rbd' type pools
Krisstoffe [Wed, 11 Jun 2025 21:57:15 +0000 (21:57 +0000)] 
storage: Implement a simple 'checkPool' method for 'rbd' type pools

Same approach is used by the gluster pool driver.

Resolves: https://gitlab.com/libvirt/libvirt/-/issues/448

Signed-off-by: Krisstoffe <krisstoffe@free.fr>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
6 weeks agodocs: outline bug expectations wrt automated tools / AI agents
Daniel P. Berrangé [Fri, 6 Jun 2025 08:28:14 +0000 (09:28 +0100)] 
docs: outline bug expectations wrt automated tools / AI agents

Bug reports from automated tools and AI agents are time consuming to
triage and have poor signal/noise ratio. Set strong expectations for
any reporters using such tools, in a (likely doomed) attempt to stem
the flow of poor quality reports.

Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 weeks agodocs: fix list term highlighting in URI docs
Daniel P. Berrangé [Mon, 9 Jun 2025 15:16:47 +0000 (16:16 +0100)] 
docs: fix list term highlighting in URI docs

Having a blank line between the term and its definition prevents the RST
to HTML convertor highlighting 'pkipath' correctly.

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
6 weeks agoci: Drop unnecessary build dependencies
Andrea Bolognani [Thu, 5 Jun 2025 16:10:42 +0000 (18:10 +0200)] 
ci: Drop unnecessary build dependencies

We no longer check for the presence of the commands included
in these packages at build time.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
6 weeks agorpm: Drop unnecessary BuildRequires
Andrea Bolognani [Thu, 5 Jun 2025 15:58:30 +0000 (17:58 +0200)] 
rpm: Drop unnecessary BuildRequires

We've recently stopped checking for the presence of various
commands at build time, which means that we no longer need
to have the corresponding packages installed in the build
environment.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
6 weeks agorpm: Fix/clarify Requires
Andrea Bolognani [Thu, 5 Jun 2025 15:58:12 +0000 (17:58 +0200)] 
rpm: Fix/clarify Requires

daemon-common should have always depended on kmod, since
there are various situations in which a module (un)load might
be triggered by a driver.

For the util-linux dependency, we're simply adjusting the
comment to match reality.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
6 weeks agonvme: Fix more missing enum switches for VIR_DOMAIN_DISK_BUS_NVME
Martin Kletzander [Mon, 9 Jun 2025 13:58:08 +0000 (15:58 +0200)] 
nvme: Fix more missing enum switches for VIR_DOMAIN_DISK_BUS_NVME

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
6 weeks agobhyve: Fix build after introduction of emulated NVMe disks
Martin Kletzander [Mon, 9 Jun 2025 13:41:06 +0000 (15:41 +0200)] 
bhyve: Fix build after introduction of emulated NVMe disks

Somehow I missed one switch over disk bus enum.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
6 weeks agoNEWS: qemu support for emulated NVMe disks
Martin Kletzander [Tue, 27 May 2025 12:00:25 +0000 (14:00 +0200)] 
NEWS: qemu support for emulated NVMe disks

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Honglei Wang <honglei.wang@smartx.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agoNEWS: vmx support for NVMe disks
Martin Kletzander [Tue, 27 May 2025 11:56:32 +0000 (13:56 +0200)] 
NEWS: vmx support for NVMe disks

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agoqemu: Add support for emulated NVMe disks
Martin Kletzander [Mon, 2 Jun 2025 09:43:31 +0000 (11:43 +0200)] 
qemu: Add support for emulated NVMe disks

Without any hotplug.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Honglei Wang <honglei.wang@smartx.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agoqemu: Add support for NVMe controllers
Martin Kletzander [Mon, 2 Jun 2025 09:37:43 +0000 (11:37 +0200)] 
qemu: Add support for NVMe controllers

Without any hotplug.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Honglei Wang <honglei.wang@smartx.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agoqemu_capabilities: Add emulated NVMe disk support to domain capabilities
Martin Kletzander [Tue, 27 May 2025 10:44:56 +0000 (12:44 +0200)] 
qemu_capabilities: Add emulated NVMe disk support to domain capabilities

This is a separate commit for review ease, but who's really going to use
a libvirt with this patch in and the actual functionality missing, that
ain't gonna happen, right?

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Honglei Wang <honglei.wang@smartx.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agoqemu_capabilities: Add NVMe controller and disk capabilities
Martin Kletzander [Tue, 27 May 2025 10:44:41 +0000 (12:44 +0200)] 
qemu_capabilities: Add NVMe controller and disk capabilities

The "nvme" device is the controller and "nvme-ns" are the
namespaces (individual disks) plugged into it.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Honglei Wang <honglei.wang@smartx.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agovmx: Add support for NVMe disks
Martin Kletzander [Mon, 26 May 2025 13:21:35 +0000 (15:21 +0200)] 
vmx: Add support for NVMe disks

Resolves: https://issues.redhat.com/browse/RHEL-7390
Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agodocs, conf, schemas: Add support for NVMe disks
Martin Kletzander [Thu, 22 May 2025 13:47:27 +0000 (15:47 +0200)] 
docs, conf, schemas: Add support for NVMe disks

NVMe disks are essentially a namespace of an NVMe controller, but to
make it easier for the users to just add a disk, the necessary details
like adding the proper controller, setting the serial number for the
controller based on the disk, are done automatically.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Honglei Wang <honglei.wang@smartx.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agoconf: Add virDomainDeviceFindNvmeController
Martin Kletzander [Mon, 26 May 2025 11:11:32 +0000 (13:11 +0200)] 
conf: Add virDomainDeviceFindNvmeController

Same as for the SCSI controller, but this time for NVMe, will be used
later to do some post parse modifications.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agoutil: Add support for parsing nvmeXnY(pZ) strings
Martin Kletzander [Thu, 22 May 2025 09:26:47 +0000 (11:26 +0200)] 
util: Add support for parsing nvmeXnY(pZ) strings

We do not guarantee that the disk names will be the same in guest as
they are in the XML, but that should not stop us from trying to be
consistent with the naming.  And since we use the same naming as the
linux kernel does, let's stick with it with nvme drives too.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agodocs, conf, schemas: Add support for NVMe controller
Martin Kletzander [Tue, 20 May 2025 09:07:45 +0000 (11:07 +0200)] 
docs, conf, schemas: Add support for NVMe controller

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Honglei Wang <honglei.wang@smartx.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
6 weeks agonodedev: add nodedev name to mdevctl unsupport msg
Boris Fiuczynski [Fri, 6 Jun 2025 09:16:06 +0000 (11:16 +0200)] 
nodedev: add nodedev name to mdevctl unsupport msg

Let's add the nodedev name to improve the error message for the user.

Signed-off-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
6 weeks agoci: refresh with 'lcitool manifest'
Michal Privoznik [Mon, 2 Jun 2025 07:36:12 +0000 (09:36 +0200)] 
ci: refresh with 'lcitool manifest'

- Replace Alpine 3.21 with 3.22

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
6 weeks agovirDomainDriverAutoShutdown: Fix printf conversion specifier for 'waitShutdownSecs'
Peter Krempa [Mon, 9 Jun 2025 06:19:04 +0000 (08:19 +0200)] 
virDomainDriverAutoShutdown: Fix printf conversion specifier for 'waitShutdownSecs'

The variable is declared as unsigned int but two places used '%d'.

Reported-in: https://issues.redhat.com/browse/RHEL-95721
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
7 weeks agoqemu: capabilities: Check if cpuModels is not NULL before trying to dereference it
anonymix007 [Wed, 4 Jun 2025 09:05:23 +0000 (12:05 +0300)] 
qemu: capabilities: Check if cpuModels is not NULL before trying to dereference it

accel->cpuModels field might be NULL if QEMU does not return CPU models.
The following backtrace is observed in such cases:
0  virQEMUCapsProbeQMPCPUDefinitions (qemuCaps=qemuCaps@entry=0x7f1890003ae0, accel=accel@entry=0x7f1890003c10, mon=mon@entry=0x7f1890005270)
   at ../src/qemu/qemu_capabilities.c:3091
1  0x00007f18b42fa7b1 in virQEMUCapsInitQMPMonitor (qemuCaps=qemuCaps@entry=0x7f1890003ae0, mon=0x7f1890005270) at ../src/qemu/qemu_capabilities.c:5746
2  0x00007f18b42fafaf in virQEMUCapsInitQMPSingle (qemuCaps=qemuCaps@entry=0x7f1890003ae0, libDir=libDir@entry=0x7f186c1e70f0 "/var/lib/libvirt/qemu",
   runUid=runUid@entry=955, runGid=runGid@entry=955, onlyTCG=onlyTCG@entry=false) at ../src/qemu/qemu_capabilities.c:5832
3  0x00007f18b42fb1a5 in virQEMUCapsInitQMP (qemuCaps=0x7f1890003ae0, libDir=0x7f186c1e70f0 "/var/lib/libvirt/qemu", runUid=955, runGid=955)
   at ../src/qemu/qemu_capabilities.c:5848
4  virQEMUCapsNewForBinaryInternal (hostArch=VIR_ARCH_X86_64, binary=binary@entry=0x7f1868002fc0 "/usr/bin/qemu-system-alpha",
   libDir=0x7f186c1e70f0 "/var/lib/libvirt/qemu", runUid=955, runGid=955,
   hostCPUSignature=0x7f186c1e9f20 "AuthenticAMD, AMD Ryzen 9 7950X 16-Core Processor, family: 25, model: 97, stepping: 2", microcodeVersion=174068233,
   kernelVersion=0x7f186c194200 "6.14.9-arch1-1 #1 SMP PREEMPT_DYNAMIC Thu, 29 May 2025 21:42:15 +0000", cpuData=0x7f186c1ea490)
   at ../src/qemu/qemu_capabilities.c:5907
5  0x00007f18b42fb4c9 in virQEMUCapsNewData (binary=0x7f1868002fc0 "/usr/bin/qemu-system-alpha", privData=0x7f186c194280)
   at ../src/qemu/qemu_capabilities.c:5942
6  0x00007f18bd42d302 in virFileCacheNewData (cache=0x7f186c193730, name=0x7f1868002fc0 "/usr/bin/qemu-system-alpha") at ../src/util/virfilecache.c:206
7  virFileCacheValidate (cache=cache@entry=0x7f186c193730, name=name@entry=0x7f1868002fc0 "/usr/bin/qemu-system-alpha", data=data@entry=0x7f18b67c37c0)
   at ../src/util/virfilecache.c:269
8  0x00007f18bd42d5b8 in virFileCacheLookup (cache=cache@entry=0x7f186c193730, name=name@entry=0x7f1868002fc0 "/usr/bin/qemu-system-alpha")
   at ../src/util/virfilecache.c:301
9  0x00007f18b42fb679 in virQEMUCapsCacheLookup (cache=cache@entry=0x7f186c193730, binary=binary@entry=0x7f1868002fc0 "/usr/bin/qemu-system-alpha")
   at ../src/qemu/qemu_capabilities.c:6036
10 0x00007f18b42fb785 in virQEMUCapsInitGuest (caps=<optimized out>, cache=<optimized out>, hostarch=VIR_ARCH_X86_64, guestarch=VIR_ARCH_ALPHA)
   at ../src/qemu/qemu_capabilities.c:1037
11 virQEMUCapsInit (cache=0x7f186c193730) at ../src/qemu/qemu_capabilities.c:1229
12 0x00007f18b431d311 in virQEMUDriverCreateCapabilities (driver=driver@entry=0x7f186c01f410) at ../src/qemu/qemu_conf.c:1553
13 0x00007f18b431d663 in virQEMUDriverGetCapabilities (driver=0x7f186c01f410, refresh=<optimized out>) at ../src/qemu/qemu_conf.c:1623
14 0x00007f18b435e3e4 in qemuConnectGetVersion (conn=<optimized out>, version=0x7f18b67c39b0) at ../src/qemu/qemu_driver.c:1492
15 0x00007f18bd69c5e8 in virConnectGetVersion (conn=0x55bc5f4cda20, hvVer=hvVer@entry=0x7f18b67c39b0) at ../src/libvirt-host.c:201
16 0x000055bc34ef3627 in remoteDispatchConnectGetVersion (server=0x55bc5f4b93f0, msg=0x55bc5f4cdf60, client=0x55bc5f4c66d0, rerr=0x7f18b67c3a80,
   ret=0x55bc5f4b8670) at src/remote/remote_daemon_dispatch_stubs.h:1265
17 remoteDispatchConnectGetVersionHelper (server=0x55bc5f4b93f0, client=0x55bc5f4c66d0, msg=0x55bc5f4cdf60, rerr=0x7f18b67c3a80, args=0x0, ret=0x55bc5f4b8670)
   at src/remote/remote_daemon_dispatch_stubs.h:1247
18 0x00007f18bd5506da in virNetServerProgramDispatchCall (prog=0x55bc5f4cae90, server=0x55bc5f4b93f0, client=0x55bc5f4c66d0, msg=0x55bc5f4cdf60)
   at ../src/rpc/virnetserverprogram.c:423
19 virNetServerProgramDispatch (prog=0x55bc5f4cae90, server=server@entry=0x55bc5f4b93f0, client=0x55bc5f4c66d0, msg=0x55bc5f4cdf60)
   at ../src/rpc/virnetserverprogram.c:299
20 0x00007f18bd556c32 in virNetServerProcessMsg (srv=srv@entry=0x55bc5f4b93f0, client=<optimized out>, prog=<optimized out>, msg=<optimized out>)
   at ../src/rpc/virnetserver.c:135
21 0x00007f18bd556f77 in virNetServerHandleJob (jobOpaque=0x55bc5f4d2bb0, opaque=0x55bc5f4b93f0) at ../src/rpc/virnetserver.c:155
22 0x00007f18bd47dd19 in virThreadPoolWorker (opaque=<optimized out>) at ../src/util/virthreadpool.c:164
23 0x00007f18bd47d253 in virThreadHelper (data=0x55bc5f4b7810) at ../src/util/virthread.c:256
24 0x00007f18bce117eb in start_thread (arg=<optimized out>) at pthread_create.c:448
25 0x00007f18bce9518c in __GI___clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

Signed-off-by: anonymix007 <anonymix007@users.noreply.github.com>
7 weeks agodocs: Drop mention of read-only git mirrors
Andrea Bolognani [Thu, 5 Jun 2025 13:27:27 +0000 (15:27 +0200)] 
docs: Drop mention of read-only git mirrors

These mirrors no longer exist, they're just straight up
redirects to GitLab now.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
7 weeks agodocs: Unify clone instructions
Andrea Bolognani [Thu, 5 Jun 2025 13:30:24 +0000 (15:30 +0200)] 
docs: Unify clone instructions

We use the same format for GitLab and libvirt.org, but not
for GitHub.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
7 weeks agolibxl_capabilities: Make some functions return void
Michal Privoznik [Mon, 26 May 2025 08:41:00 +0000 (10:41 +0200)] 
libxl_capabilities: Make some functions return void

Inside of libxlMakeDomainCapabilities() there are some functions
called and basically all of them never return anything but zero
(indicating success). Yet, they are called in a fashion that
suggests otherwise. Turn those functions into void and drop
checks for their retvals.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agolibxl: capabilities: report supported console types
Roman Bogorodskiy [Sat, 24 May 2025 14:00:04 +0000 (16:00 +0200)] 
libxl: capabilities: report supported console types

Extend domain capabilities with information about the supported console
device types.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
7 weeks agoqemu: capabilities: report supported console types
Roman Bogorodskiy [Wed, 14 May 2025 16:28:47 +0000 (18:28 +0200)] 
qemu: capabilities: report supported console types

Extend domain capabilities with information about the supported console
device types.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
7 weeks agobhyve: capabilities: report NMDM console
Roman Bogorodskiy [Sun, 11 May 2025 16:20:33 +0000 (18:20 +0200)] 
bhyve: capabilities: report NMDM console

Extend domain capabilities to report the NMDM console support.

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
7 weeks agodomain_capabilities: add console capabilities
Roman Bogorodskiy [Sun, 11 May 2025 16:20:20 +0000 (18:20 +0200)] 
domain_capabilities: add console capabilities

Currently, domain capabilities do not include information about the
supported console device types. While most of the drivers support
'pty' console type, it's not the case for bhyve. Without this
information, management software cannot always generate compatible
domain configuration.

To address that, extend domain capabilities like that:

   <devices>
    ...
    <console supported='yes'>
      <enum name='type'>
        <value>pty</value>
        <value>type2</value>
        ...
      </enum>
    </console>
    ...
   </devices>

Signed-off-by: Roman Bogorodskiy <bogorodskiy@gmail.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
7 weeks agoconf: desktop graphics remove unused option
Kirill Shchetiniuk [Wed, 4 Jun 2025 12:24:15 +0000 (14:24 +0200)] 
conf: desktop graphics remove unused option

Previously, the 'desktop' graphics configuration contained the
'fullscreen' option which was never used, removed the unused option.

Signed-off-by: Kirill Shchetiniuk <kshcheti@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoconf: RDP graphics parse refactor
Kirill Shchetiniuk [Wed, 4 Jun 2025 12:24:14 +0000 (14:24 +0200)] 
conf: RDP graphics parse refactor

Previously, the RDP graphics definition parsing were implemented by
string parsing, the virDomainGraphicsDefParseXMLRDP function is
refactored to use the appropriate virXMLProp* utility functions.
Overall parsing logic was not changed and results the same output as
before.

Moreover, 'replaceUser' and 'mutliUser' params type was changed from
bool to tristate type, to avoid unnecessary type convertions.

Signed-off-by: Kirill Shchetiniuk <kshcheti@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoconf: SDL fullscreen option refactor
Kirill Shchetiniuk [Wed, 4 Jun 2025 12:24:13 +0000 (14:24 +0200)] 
conf: SDL fullscreen option refactor

Previously, the fullscreen option were parsed as a tristate but stored
as a bool type, changed the fullscreen option type to tristate bool to
avoid unnecessary type convertions.

Signed-off-by: Kirill Shchetiniuk <kshcheti@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoconf: VNC graphics parse refactor
Kirill Shchetiniuk [Wed, 4 Jun 2025 12:24:12 +0000 (14:24 +0200)] 
conf: VNC graphics parse refactor

Previously, the VNC graphics definition parsing were implemented by
string parsing, the virDomainGraphicsDefParseXMLVNC was refactored
to use the appropriate virXMLProp* utility functions. Overall
parsing logic was not changed and results the same output as before.

Signed-off-by: Kirill Shchetiniuk <kshcheti@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoNEWS: Document removal of support of VIR_DUMP_LIVE flag from QEMU driver
Michal Privoznik [Tue, 3 Jun 2025 07:26:17 +0000 (09:26 +0200)] 
NEWS: Document removal of support of VIR_DUMP_LIVE flag from QEMU driver

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
7 weeks agoqemu: Don't accept VIR_DUMP_LIVE flag in qemuDomainCoreDumpWithFormat()
Michal Privoznik [Tue, 3 Jun 2025 06:27:31 +0000 (08:27 +0200)] 
qemu: Don't accept VIR_DUMP_LIVE flag in qemuDomainCoreDumpWithFormat()

QEMU can't really do live dumps of guest memory. It's because
inside of dump_init() the vm_stop() is called basically
unconditionally (the only condition is whether vCPUs are
running). Hence, there is no way for us to do live dumps and thus
honor VIR_DUMP_LIVE flag. Instead of silently pretending the flag
works, reject it with appropriate error message.

Resolves: https://gitlab.com/libvirt/libvirt/-/issues/646
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
7 weeks agoqemu: command: Don't attempt to set backend MTU for networks which don't use host...
Peter Krempa [Mon, 2 Jun 2025 14:55:16 +0000 (16:55 +0200)] 
qemu: command: Don't attempt to set backend MTU for networks which don't use host backend directly

Attempting to set MTU for network types which don't actually use the
network device on the host results in a failure. The 'mtu' property is
also used e.g. for the 'host_mtu' property of e.g. 'virtio-net-pci'
which is applied even in vhost-user mode.

Use the existing switch which selects devices without a network device
backend on the host side and skip setting the MTU.

Tested by running 'passt' in vhost-user mode manually:

 passt -f --vhost-user -s /tmp/vh.sock

and the following XML:

 <interface type="vhostuser">
   <mac address="52:54:00:3d:91:97"/>
   <source type="unix" path="/tmp/vh.sock" mode="client"/>
   <model type="virtio"/>
   <mtu size="9999"/>
   <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
 </interface>

The OS in the guest reports MTU 9999.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/717
Closes: https://gitlab.com/libvirt/libvirt/-/issues/192
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoesx: Avoid corner case where esxUtil_ParseDatastorePath could be called with NULL...
Peter Krempa [Mon, 2 Jun 2025 08:26:38 +0000 (10:26 +0200)] 
esx: Avoid corner case where esxUtil_ParseDatastorePath could be called with NULL 'datastorePath'

The generated code which parses the data from XML in
esxVI_LookupDatastoreContentByDatastoreName can fill the 'folderPath'
property with NULL if it were missing from the input XML. While this is
not likely when talking to esx it is a possible outcome. Skipp NULL
results.

All other code paths already ensure that the function is not called with
NULL.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/776
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agodocs: Change units to 'kiB' from 'kB'/'kilobytes'/'kb'
Peter Krempa [Mon, 2 Jun 2025 08:56:32 +0000 (10:56 +0200)] 
docs: Change units to 'kiB' from 'kB'/'kilobytes'/'kb'

Use the short unit for kibibytes instead of the confusing or plainly
wrong units.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/594
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agovirConnectAuthCallbackDefault: Return failure if 'virGetPassword' returns NULL
Peter Krempa [Thu, 29 May 2025 20:00:49 +0000 (22:00 +0200)] 
virConnectAuthCallbackDefault: Return failure if 'virGetPassword' returns NULL

virGetPassword can return NULL on linux or BSD if it fails. The caller
in virConnectAuthCallbackDefault does dereference it unconditionally.

Return failure if virGetPassword returns NULL.

Fixes: db72866310d1e520efa8ed2d4589bdb5e76a1c95
Closes: https://gitlab.com/libvirt/libvirt/-/issues/777
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
7 weeks agostorage_file_probe: Remove unused image probing callbacks
Peter Krempa [Wed, 28 May 2025 16:18:38 +0000 (18:18 +0200)] 
storage_file_probe: Remove unused image probing callbacks

Remove the old now-unused infrastructure.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Move setting of 'compat' attribute to qcow2GetFeatures
Peter Krempa [Wed, 28 May 2025 16:13:39 +0000 (18:13 +0200)] 
storage_file_probe: Move setting of 'compat' attribute to qcow2GetFeatures

Since the 'compat' field is set based on qcow2 features it belongs to
the qcow2 code rather than to the main metadata probing function.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Parse all qcow2 extensions at once
Peter Krempa [Wed, 28 May 2025 15:49:20 +0000 (17:49 +0200)] 
storage_file_probe: Parse all qcow2 extensions at once

Refactor qcow2GetExtensions to parse everything at once and directly
assign it into fields in the parsed virStorageSource.

This removes the need for qcow2GetDataFile as it will be parsed
directly.

The patch also simplifies the juggling of variables which was needed to
parse the backing file format, when it was passed via pointer in
argument.

qcow2GetExtensions is now invoked on qcow2 images so we can remove the
version check for qcow(v1) images.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Call qcow2GetFeatures from qcow2GetImageSpecific
Peter Krempa [Wed, 28 May 2025 15:36:13 +0000 (17:36 +0200)] 
storage_file_probe: Call qcow2GetFeatures from qcow2GetImageSpecific

Parse qcow2 feature flags from qcow2GetImageSpecific. To achieve that
qcow2GetFeatures is refactored to take virStorageSource directly and
fill the data. To avoid the need to pass 'format' the parsing of the
qcow2 version is changed to access the offset directly (same as in
qcow2GetExtensions)

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Move qcow2GetFeatures(ProcessGroup) functions
Peter Krempa [Thu, 29 May 2025 08:12:05 +0000 (10:12 +0200)] 
storage_file_probe: Move qcow2GetFeatures(ProcessGroup) functions

Move the two functions to where they will be used. Subsequent patches
will refactor the control flow so that they will no longer be declared
ahead of time. Moving them in a separate patch will make the changes in
the refactor more clear to see.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Move logic from qcow2GetClusterSize to qcow2GetImageSpecific
Peter Krempa [Wed, 28 May 2025 15:26:13 +0000 (17:26 +0200)] 
storage_file_probe: Move logic from qcow2GetClusterSize to qcow2GetImageSpecific

Move the cluster size parser into the image specific code for qcow2,
which will later allow us to remove the callback for cluster size which
is not used by any other format.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Refactor qcowXGetBackingStore into specific callbacks for qcow...
Peter Krempa [Wed, 28 May 2025 15:18:36 +0000 (17:18 +0200)] 
storage_file_probe: Refactor qcowXGetBackingStore into specific callbacks for qcow and qcow2

Change qcowXGetBackingStore to use the new function prototype which
fills virStorageSource directly. Convert the copying of the backing file
string from 'g_new0' + 'memcpy' to 'g_strndup' as we treat it as a
string.

Introduce qcowGetImageSpecific (as a wrapper for qcowXGetBackingStore)
and qcow2GetImageSpecific. The latter of the two will be used to collect
all the qcow2-specific code later on, but for now it just parses the
backing store and the format.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Refactor vmdk4GetBackingStore into vmdk4GetImageSpecific
Peter Krempa [Wed, 28 May 2025 14:20:15 +0000 (16:20 +0200)] 
storage_file_probe: Refactor vmdk4GetBackingStore into vmdk4GetImageSpecific

Change to the new function prototype and adjust the code to fill the
fields in virStorageSource directly.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Refactor qedGetBackingStore into qedGetImageSpecific
Peter Krempa [Wed, 28 May 2025 14:15:42 +0000 (16:15 +0200)] 
storage_file_probe: Refactor qedGetBackingStore into qedGetImageSpecific

Change to the new function prototype and adjust the code to fill the
fields in virStorageSource directly.

The code also converts the copying of the backing file string from
'g_new0' + 'memcpy' to 'g_strndup' as we treat it as a string later on.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Refactor cowGetBackingStore into cowGetImageSpecific
Peter Krempa [Wed, 28 May 2025 14:09:01 +0000 (16:09 +0200)] 
storage_file_probe: Refactor cowGetBackingStore into cowGetImageSpecific

Rename the function, adjust parameters and fix the code to fill the
virStorageSource fields directly.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: Add image specific callback taking the whole virStorageSource
Peter Krempa [Wed, 28 May 2025 13:59:33 +0000 (15:59 +0200)] 
storage_file_probe: Add image specific callback taking the whole virStorageSource

The callbacks getting just some fields are not flexible and in some
cases cause the metadata to be probed multiple times.

Add a callback that will pass the whole virStorageSource struct being
probed so that the code can be written more efficiently.

As a first step we add just the callback. The specific format helpers
will be refactored and subsequently all the other callbacks will be
removed.

To simplify the refactors that will convert all the code to the new
callbacks the new callback is placed first but the calls to cleanup
previous metadata are moved before it. They'll be removed once the
refactors are complete together with the other callbacks.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agovirstoragetest: Add qcow2 bitmaps to some images
Peter Krempa [Thu, 29 May 2025 08:31:46 +0000 (10:31 +0200)] 
virstoragetest: Add qcow2 bitmaps to some images

Add change block tracking bitmaps to some of the qcow2 images, to ensure
that they work with our qcow2 header parser even when we don't parse
them ourselves.

The existing images were modified by running:

 $ qemu-img bitmap --add qcow2_qcow2-qcow2_qcow2-auto.qcow2 testbitmap
 $ qemu-img bitmap --add qcow2datafile-datafile.qcow2 testbitmap
 $ qemu-img bitmap --add datafile.qcow2 testbitmap

in tests/virstoragetestdata/images/.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agostorage_file_probe: qcow2GetExtensions: Fix qcow2 header extension parsing
Peter Krempa [Tue, 27 May 2025 15:39:03 +0000 (17:39 +0200)] 
storage_file_probe: qcow2GetExtensions: Fix qcow2 header extension parsing

There are 3 bugs in the qcow2 header extension parser:

1) Header extension padding not taken into account

  Per qcow2 documentation (qemu.git/docs/interop/qcow2.txt, also now
  mirrored in the comment explaining the parser) each header extension
  entry is padded to a multiple of 8 bytes.

  Our parser didn't take the padding into account and advanced the
  current offset only by the 'length', which corresponds to the length
  of the data.

  This meant that in vast majority of cases only the first extension
  would be parsed correctly. For any other one we'd try to fetch the
  magic and length from wrong place.

  Luckily this wasn't a problem for most of the almost 15 years this bug
  existed as we only cared about the backing file format string header
  which was always stored first by qemu.

  It is now a problem in the very specific case when a qcow2 image has a
  'data-file' and also a backing store with format. In such case we'd
  parse the backing store format properly as it's the first header and
  'data-file' being the second would be skipped.

  The buffer bounds checks were correct so we didn't violate any memory
  boundaries.

2) Integer underflow in calculation of end of header extension block

  If the image doesn't have a backing image, the 'backing_file_offset'
  qcow2 header field is 0. We use that value as 'extensions_end' which
  is used in the while loop to parse the extension entries.

  The check was done as "offset < (extensions_end - 8)", thus it
  unreflows when there's no filename.

  The design of the loop prevented anything bad from happening though.

3) Off-by-one when determining end of header extension block

  The aforementioned end of extension check above also has an off-by-one
  error as it allowed another loop if more than 8 bytes were available.

  Now the termination entry has data length of 0 bytes so we'd not be
  able to properly process that one.

  This wasn't a problem either as for now there's just the terminator
  having 0 byte length.

This patch improves documentation by quoting the qcow2 interoperability
document and adjusts the loop condition and length handling to comply
with the specs.

Interestingly we also had a test case for this specific scenario but the
expected test output was wrong.

Fixes: a93402d48b2996e5300754d299ef0d3f646aa098
Resolves: https://issues.redhat.com/browse/RHEL-93775
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agovirstoragetest: Reformat output to highlight dataFile relationship
Peter Krempa [Tue, 27 May 2025 14:55:06 +0000 (16:55 +0200)] 
virstoragetest: Reformat output to highlight dataFile relationship

Move the 'dataFileRaw' field to the main block as it's based on the data
in the qcow2 header same as 'backingStoreRaw'.

Indent and annotate the corresponding dataFile block to show where it
belongs.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoqcow2GetExtensions: Add debug logs for interesting fields in qcow2 header extension...
Peter Krempa [Wed, 28 May 2025 08:00:34 +0000 (10:00 +0200)] 
qcow2GetExtensions: Add debug logs for interesting fields in qcow2 header extension parser

Add debug statements which were useful in figuring out bugs in the qcow2
extension parser.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoqemuProcessStartValidateGraphics: Move RDP validation logic to qemu_validate.c
Peter Krempa [Mon, 26 May 2025 10:20:00 +0000 (12:20 +0200)] 
qemuProcessStartValidateGraphics: Move RDP validation logic to qemu_validate.c

Move the rest of the RDP graphics validation code to
qemuValidateDomainDeviceDefRDPGraphics together with the rest of the
validation.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoqemuProcessStartValidateGraphics: Remove redundant checks for RDP protocol features
Peter Krempa [Mon, 26 May 2025 08:48:10 +0000 (10:48 +0200)] 
qemuProcessStartValidateGraphics: Remove redundant checks for RDP protocol features

Both the 'replaceUser' and 'multiUser' field are already validated in
qemuValidateDomainDeviceDefRDPGraphics.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoqemu: Move checks for number of listening sockets of graphics to validation code
Peter Krempa [Mon, 26 May 2025 08:37:52 +0000 (10:37 +0200)] 
qemu: Move checks for number of listening sockets of graphics to validation code

Move the checks from 'qemuProcessStartValidateGraphics' to the
correspodning graphics validation functions in qemu_validate.c:

 - qemuValidateDomainDeviceDefSPICEGraphics
 - qemuValidateDomainDeviceDefVNCGraphics
 - qemuValidateDomainDeviceDefRDPGraphics

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoqemu: Move logic from qemuProcessStartValidateShmem to qemuValidateDomainDeviceDefShmem
Peter Krempa [Fri, 23 May 2025 14:43:56 +0000 (16:43 +0200)] 
qemu: Move logic from qemuProcessStartValidateShmem to qemuValidateDomainDeviceDefShmem

Move the check to the appropriate central place.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoqemu: conf: Drop handling of 'vxhs' config options
Peter Krempa [Sun, 25 May 2025 06:17:21 +0000 (08:17 +0200)] 
qemu: conf: Drop handling of 'vxhs' config options

Remove the config file handling for the config options we no longer use.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoqemu.conf: Document options for VxHS block network protocol TLS config as ignored
Peter Krempa [Sun, 25 May 2025 06:12:48 +0000 (08:12 +0200)] 
qemu.conf: Document options for VxHS block network protocol TLS config as ignored

qemu-5.2 dropped support for VxHS. As we now require at least qemu-6.2,
the qemu.conf option for setting up TLS for VxHS are no longer used.
Document them as such.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoqemu: block: Drop code for 'vxhs' storage protocol
Peter Krempa [Sun, 25 May 2025 06:18:21 +0000 (08:18 +0200)] 
qemu: block: Drop code for 'vxhs' storage protocol

qemu-5.2 dropped support for the 'vxhs' protocol. We require qemu-5.2
since commit ce48d584cc4 and thus the block code for vxhs is now dead.
Remove it.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoqemu: Move disk backend validation checks from qemuProcessStartValidateDisks to qemuD...
Peter Krempa [Fri, 23 May 2025 14:05:34 +0000 (16:05 +0200)] 
qemu: Move disk backend validation checks from qemuProcessStartValidateDisks to qemuDomainValidateStorageSource

Move the check forbidding VXHS disks and checking the NVME backend
capability to the validation code.

Remove the now unused qemuProcessStartValidateDisks.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoqemuDomainValidateStorageSource: Rework protocol validation into a switch statement
Peter Krempa [Fri, 23 May 2025 13:25:31 +0000 (15:25 +0200)] 
qemuDomainValidateStorageSource: Rework protocol validation into a switch statement

Move the validation of TFTP and NFS into a new switch statement which
will be used for validating also other protocol config in the future.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
7 weeks agoutil: Move virFileGetExistingParent out of ifdef __linux__
Jiri Denemark [Tue, 3 Jun 2025 09:23:28 +0000 (11:23 +0200)] 
util: Move virFileGetExistingParent out of ifdef __linux__

The function is called by virFileIsSharedFSOverride which is not Linux
specific and thus building on anything but Linux failes.

Fixes: 94fb348d670f612c0b58901c9829b4eec81faa50
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
7 weeks agoutil: Avoid statfs in virFileGetExistingParent
Jiri Denemark [Tue, 3 Jun 2025 08:33:03 +0000 (10:33 +0200)] 
util: Avoid statfs in virFileGetExistingParent

The code was separated from virFileIsSharedFSType which is Linux-only,
but virFileGetExistingParent is also called from
virFileIsSharedFSOverride which is OS independent. Thus we can't use
statfs. Let's use virFileExists (access) instead, we were not interested
in anything but success/failure from statfs anyway.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
7 weeks agodocs: fix indent of hostdev examples
Daniel P. Berrangé [Fri, 30 May 2025 14:05:55 +0000 (15:05 +0100)] 
docs: fix indent of hostdev examples

Reviewed-by: Ján Tomko <jtomko@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
7 weeks agoutil: Fix virFileIsSharedFSOverride on nonexistent paths
Jiri Denemark [Wed, 28 May 2025 14:37:32 +0000 (16:37 +0200)] 
util: Fix virFileIsSharedFSOverride on nonexistent paths

Commit v11.0.0-162-gf2023e8018 added path canonicalization to
virFileIsSharedFSOverride to make sure we can properly match shared
filesystem override paths which include symlinks. But
virFileCanonicalizePath only works on existing paths, while
virFileIsSharedFSOverride may be called on paths that do not exist yet.
Matching paths against overrides has always worked even for nonexistent
paths. To fix the regression we need to first get the longest existing
sub-path and canonicalize only this part and use the result for
searching in overrides. Clearly any portion of the path we dynamically
create is not going to end up on a different filesystem to what the
parent directory is stored in. So checking just the existing parent is
enough.

https://issues.redhat.com/browse/RHEL-86592

Fixes: f2023e8018fe18550ad6aec66fe72bd1376f8522
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoutil: Introduce virFileGetExistingParent helper
Jiri Denemark [Wed, 28 May 2025 14:36:59 +0000 (16:36 +0200)] 
util: Introduce virFileGetExistingParent helper

The code from virFileIsSharedFSType which finds the longest existing
path for a given input is separated into a new helper so that it can be
reused elsewhere.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoutil: Document limitation of virFileCanonicalizePath
Jiri Denemark [Wed, 28 May 2025 14:34:18 +0000 (16:34 +0200)] 
util: Document limitation of virFileCanonicalizePath

On most platforms virFileCanonicalizePath is implemented using
realpath(), which only works on existing paths.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7 weeks agoPost-release version bump to 11.5.0
Jiri Denemark [Mon, 2 Jun 2025 07:57:25 +0000 (09:57 +0200)] 
Post-release version bump to 11.5.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7 weeks agoRelease of libvirt-11.4.0 v11.4.0
Jiri Denemark [Mon, 2 Jun 2025 07:52:35 +0000 (09:52 +0200)] 
Release of libvirt-11.4.0

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7 weeks agoTranslated using Weblate (Korean)
김인수 [Sun, 1 Jun 2025 09:35:21 +0000 (09:35 +0000)] 
Translated using Weblate (Korean)

Currently translated at 99.8% (10912 of 10925 strings)

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

Signed-off-by: 김인수 <simmon@nplob.com>
8 weeks agoNEWS: Mention removal of compile time helper program lookup, virito-net ABI check...
Peter Krempa [Thu, 29 May 2025 12:25:32 +0000 (14:25 +0200)] 
NEWS: Mention removal of compile time helper program lookup, virito-net ABI check and FDC capabilities

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
8 weeks agoqemu: Fix error when migration with shared TPM storage is unsupported v11.4.0-rc2
Jiri Denemark [Tue, 27 May 2025 13:42:36 +0000 (15:42 +0200)] 
qemu: Fix error when migration with shared TPM storage is unsupported

The VIR_ERR_NO_SUPPORT error is supposed to be used for unsupported
driver APIs. It is incorrectly used when swtpm does not support
migration with shared storage resulting in a rather strange error
message:

    this function is not supported by the connection driver: the running
    swtpm does not support migration with shared storage

The correct VIR_ERR_OPERATION_UNSUPPORTED error code provides a much
better message:

    Operation not supported: the running swtpm does not support
    migration with shared storage

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>