================ libvirt releases ================ This is the list of official releases for libvirt, along with an overview of the changes introduced by each of them. For a more fine-grained view, use the `git log`_. v10.2.0 (unreleased) ==================== * **Security** * **Removed features** * **New features** * ch: Basic save and restore support for ch driver The ch driver now supports basic save and restore operations. This is functional on domains without any network, host device config defined. The `path` parameter for save and restore should be a directory. * qemu: Support for driver type ``mtp`` in ```` devices The ``mtp`` driver type exposes the ``usb-mtp`` device in QEMU. The guest can access files on this driver through the Media Transfer Protocol (MTP). * **Improvements** * **Bug fixes** * qemu: Fix migration from libvirt older than 9.10.0 when vmx is enabled A domain with vmx feature enabled (which may be even done automatically with ``mode='host-model'``) started by libvirt 9.9.0 or older cannot be migrated to libvirt 9.10.0, 10.0.0, and 10.1.0 as the target host would complain about a lot of extra ``vmx-*`` features. Migration of similar domains started by the affected releases to libvirt 9.9.0 and older does not work either. Since libvirt 10.2.0 migration works again with libvirt 9.9.0 and older in both directions. Migration from the affected releases to 10.2.0 works as well, but the other direction remains broken unless the fix is backported. v10.1.0 (2024-03-01) ==================== * **Security** * ``CVE-2024-1441``: Fix off-by-one error leading to a crash In **libvirt-1.0.0** there were couple of interface listing APIs introduced which had an off-by-one error. That error could lead to a very rare crash if an array was passed to those functions which did not fit all the interfaces. In **libvirt-5.10** a check for non-NULL arrays has been adjusted to allow for NULL arrays with size 0 instead of rejecting all NULL arrays. However that made the above issue significantly worse since that off-by-one error now did not write beyond an array, but dereferenced said NULL pointer making the crash certain in a specific scenario in which a NULL array of size 0 was passed to the aforementioned functions. * **New features** * nodedev: Support updating mdevs The node device driver has been extended to allow updating mediated node devices. Options are available to target the update against the persistent, active or both configurations of a mediated device. **Note:** The support is only available with at least mdevctl v1.3.0 installed. * qemu: Add support for /dev/userfaultfd On hosts with new enough kernel which supports /dev/userfaultfd libvirt will now automatically grant QEMU access to this device. It's no longer needed to set vm.unprivileged_userfaultfd sysctl. * qemu: Support clusters in CPU topology It is now possible to configure the guest CPU topology to use clusters. Additionally, if CPU clusters are present in the host topology, they will be reported as part of the capabilities XML. * network: Make virtual domains resolvable from the host When starting a virtual network with a new ``register='yes'`` attribute in the ```` element, libvirt will configure ``systemd-resolved`` to resolve names of the connected guests using the name server started for this network. * qemu: Introduce dynamicMemslots attribute for virtio-mem QEMU now allows setting ``.dynamic-memslots`` attribute for virtio-mem-pci devices. When turned on, it allows memory exposed to guest to be split into multiple memory slots and thus smaller memory footprint (see the original commit for detailed explanation). * **Improvements** * nodedev: Add ability to update persistent mediated devices by defining them Existing persistent mediated devices can now also be updated by ``virNodeDeviceDefineXML()`` as long as parent and UUID remain unchanged. * ch: Enable ``ethernet`` interface mode support ```` can now be used for CH domains. * viraccessdriverpolkit: Add missing vtpm case Secrets with ```` were left unable to be checked for in the access driver, i.e. in ACL rules. Missing code was provided. * virt-admin: Notify users to use explicit URI if connection fails ``virt-admin`` doesn't try to guess the URI of the daemon to manage so a failure to connect may be confusing for users if modular daemons are used. Add a hint to use the URI of the dameon to manage. * **Bug fixes** * qemu_process: Skip over non-virtio non-TAP NIC models when refreshing rx-filter If ``trustGuestRxFilters`` is enabled for a vNIC that doesn't support it, libvirt may throw an error when such domain is being started, loaded from a saved state, migrated, etc. These errors are now silenced, but make sure to fix such configurations (after previous release it is even possible to change ``trustGuestRxFilters`` value on live domains via ``virDomainUpdateDeviceFlags()`` or ``virsh device-update``). * domain: Fix check for overlapping ```` devices A bug was identified which caused libvirt to report two NVDIMMs as overlapping even though they weren't. This now fixed. * vmx: Accept empty fileName for cdrom-image Turns out, ``fileName`` attribute (which contains path to CDROM image) can be set to an empty string (``""``) to denote a state in which the CDROM has no medium in it. Libvirt used to reject such configuration file, but not anymore. * qemu_hotplug: Don't lose 'created' flag in qemuDomainChangeNet() When starting a domain, libvirt tracks what resources it created for it and which were pre-existing and uses this information to preserve pre-existing resources when cleaning up after said domain is shut off. But for macvtaps this information was lost after the macvtap device was changed (e.g. via ``virsh update-device``). * Fix virStream hole handling When a client sent multiple holes into a virStream it may have caused daemon hangup as the daemon stopped processing RPC from the client temporarily. This is now fixed. * nodedev: Don't generate broken XML with certain hardware A broken node device XML would be generated in a rare case when a hardware device had certain characters in the VPD fields. * qemu: Fix reservation of manually specified port for disk migration A manually specified port would not be relased after disk migration making it impossible to use it again. v10.0.0 (2024-01-15) ==================== * **New features** * qemu: Enable ``postcopy-preempt`` migration capability Post-copy migrations are now started with ``postcopy-preempt`` capability enabled as long as it is supported by both sides of migration. This should enable faster migration of memory pages that the destination tries to read before they are migrated from the source. * qemu: Add support for mapping iothreads to virtqueues of ``virtio-blk`` devices QEMU added the possibility to map multiple ``iothreads`` to a single ``virtio-blk`` device and map them even to specific virtqueues. Libvirt adds a ```` subelement of the `` `` element that users can use to configure the mapping. * qemu: Allow automatic resize of block-device-backed disk to full size of the device The new flag ``VIR_DOMAIN_BLOCK_RESIZE_CAPACITY`` for ``virDomainBlockResize`` allows resizing a block-device backed ``raw`` disk of a VM without the need to specify the full size of the block device. * qemu: automatic selection/binding of VFIO variant drivers When a device is assigned to a guest using VFIO with ````, libvirt will now search the running kernel's modules.alias file for the most specific match to that device for a VFIO driver, and bind that driver to the device rather than vfio-pci. A specific driver can also be forced, using the ```` attribute. * qemu: add runtime configuration option for nbdkit Since the new nbdkit support requires a recent selinux policy that is not widely available yet, it is now possible to build libvirt with nbdkit support for remote disks but disabled at runtime. This behavior is controlled via the storage_use_nbdkit option of the qemu driver configuration file. The option will default to being disabled, but this may change in a future release and can be customized with the nbdkit_config_default build option. * qemu: add ID mapping support for virtiofsd New ```` element was added for virtiofsd-based ```` devices. It can be used to set up UID and GID mapping between host and guest, making running virtiofsd unprivileged much more useful. * **Improvements** * qemu: Improve migration XML use when persisting VM on destination When migrating a VM with a custom migration XML, use it as a base for persisting it on the destination as users could have changed non-ABI breaking facts which would prevent subsequent start if the old XML were used. * qemu: Simplify non-shared storage migration to ``raw`` block devices The phase of copying storage during migration without shared storage requires that both the source and destination image are identical in size. This may not be possible if the destination is backed by a block device and the source image size is not a multiple of the block device block size. Libvirt aleviates this by automatically adding a ```` to match the size of the source image rather than failing the migration. * test driver: Support for hotplug/hotunplug of PCI devices The test driver now supports basic hotplug and hotunplug of PCI devices. * qemu: allow virtiofsd to run unprivileged Nowadays virtiofsd no longer requires to run with root privileges, so the restriction to always run as root is now removed from libvirt too. * **Bug fixes** * qemu: Various migration bug fixes and debuggability improvement This release fixes multiple bugs in virsh and libvirt in handling of migration arguments and XMLs and modifies error reporting for better debugging. * conf: Restore setting default bus for input devices Because of a regression, starting from 9.3.0 libvirt did not autofill bus for input devices. With this release the regression was identified and fixed. * qemu: Relax check for memory device coldplug Because of a check that was too aggressive, a virtio-mem memory device could not be cold plugged. This is now fixed. * qemu: Be less aggressive when dropping channel source paths Another regression is resolved, (introduced in 9.7.0) when libvirt was too aggressive when dropping parsed paths for sources * qemuDomainChangeNet: Reflect trustGuestRxFilters change On device-update, when a user requested change of trustGuestRxFilters for a domain's libvirt did nothing. It did not throw an error nor did it reflect the change. Starting with this release, the change is reflected. v9.10.0 (2023-12-01) ==================== * **New features** * Introduce pipewire audio backend The QEMU hypervisor driver now allows setting ``pipewire`` backend for ``