|
| 1 | +--- |
| 2 | +title: "Cloud Hypervisor v52.0 Released!" |
| 3 | +date: 2026-05-14T21:58:11Z |
| 4 | +draft: false |
| 5 | +contributors: [Cloud Hypervisor Team] |
| 6 | +--- |
| 7 | +This release has been tracked in [v52.0 group](https://github.com/orgs/cloud-hypervisor/projects/6/views/6?filterQuery=release%3A%22Release+52%22) of our [roadmap project](https://github.com/orgs/cloud-hypervisor/projects/6/). |
| 8 | + |
| 9 | +Security Fixes |
| 10 | +-------------- |
| 11 | + |
| 12 | +This release fixes a use-after-free vulnerability in the |
| 13 | +`virtio-block` async I/O completion path (#8220). Details can be found |
| 14 | +in GHSA-f47p-p25q-83rh (CVE-2026-45782). |
| 15 | + |
| 16 | +Confidential VM Support: KVM SEV-SNP |
| 17 | +------------------------------------ |
| 18 | + |
| 19 | +AMD SEV-SNP confidential VMs can now be launched on KVM in addition to |
| 20 | +MSHV. Cloud Hypervisor uses `guest_memfd` to back private memory and |
| 21 | +loads an IGVM-packaged firmware (e.g. Oak stage0) to bring up an |
| 22 | +SEV-SNP guest on real hardware (#7942). |
| 23 | + |
| 24 | +Measured-boot support has been completed for KVM SEV-SNP guests, |
| 25 | +bringing parity with the QEMU launch flow: the kernel, command line, |
| 26 | +and initrd are reflected in the launch measurement, and a signed SNP |
| 27 | +ID block can be passed so the guest (or a remote attestor) can verify |
| 28 | +the launch (#8123). |
| 29 | + |
| 30 | +VFIO Device Passthrough via `iommufd` and `vfio-cdev` |
| 31 | +---------------------------------------------------- |
| 32 | + |
| 33 | +Cloud Hypervisor now supports the modern Linux VFIO device-access |
| 34 | +model based on the `iommufd` subsystem and per-device `vfio-cdev` |
| 35 | +character devices (available since Linux v6.6). This unlocks the |
| 36 | +advanced IOMMU features exposed by modern hardware and enables fully |
| 37 | +accelerated IOMMU support inside the guest. The legacy |
| 38 | +`container/group`-based path continues to be supported (#7981). |
| 39 | + |
| 40 | +In addition, several VFIO/PCI improvements have landed: |
| 41 | + |
| 42 | +* A new `host_mmap_bars` option allows selective mapping of VFIO BARs |
| 43 | + into the guest, so devices that expose registers that should not be |
| 44 | + fast-pathed can be selectively trapped (#7991). |
| 45 | +* Sub-page VFIO BARs are now expanded to a full page for `mmap()`, |
| 46 | + avoiding spurious failures on devices with small BARs (#7939). |
| 47 | +* `VfioMsix::cap` and `VfioMsix::bar` are now kept synchronized to |
| 48 | + avoid stale MSI-X state (#7993). |
| 49 | +* VFIO MMIO regions are now reliably cleared in `DeviceManager::drop` |
| 50 | + (#8063). |
| 51 | +* Deferred PCI BAR reprogramming state is now part of the saved |
| 52 | + device state (#7945). |
| 53 | +* GSIs for MSI/MSI-X interrupt vectors are now allocated lazily, |
| 54 | + reducing GSI consumption for VMs with many devices (#7940). |
| 55 | + |
| 56 | +Multi-Connection TCP Live Migration |
| 57 | +----------------------------------- |
| 58 | + |
| 59 | +The `send-migration` HTTP command now accepts a `connections` |
| 60 | +parameter (defaults to `1`) that controls how many parallel TCP |
| 61 | +connections are used for the live migration data transfer. On |
| 62 | +servers with high-bandwidth (e.g. 100G) network links, multiple |
| 63 | +connections significantly increase migration throughput (#7669). |
| 64 | + |
| 65 | +Userfaultfd Demand-Paged Snapshot Restore |
| 66 | +----------------------------------------- |
| 67 | + |
| 68 | +A new `memory_restore_mode` option on the restore path allows guest |
| 69 | +memory to be populated lazily via `userfaultfd` instead of reading |
| 70 | +the entire memory snapshot before the VM resumes. This dramatically |
| 71 | +reduces restore-to-resume latency for large guests, at the cost of |
| 72 | +faulting pages in on demand after resume (#7800). |
| 73 | + |
| 74 | +Configurable PCI BDFs for Devices |
| 75 | +---------------------------------- |
| 76 | + |
| 77 | +Users now can configure the PCI slot/device number, the middle |
| 78 | +part of the PCI BDF, through the CLI and API; bus and function |
| 79 | +remain fixed at `0`. This covers virtio devices (except balloon), |
| 80 | +VFIO devices, vfio-user device, and generic vhost-user devices |
| 81 | +(#8175, #7965, #8174, #8163). |
| 82 | + |
| 83 | +AIO Block Backend `write_zeroes` and `punch_hole` Support |
| 84 | +--------------------------------------------------------- |
| 85 | + |
| 86 | +The AIO block backend now implements `write_zeroes` and `punch_hole`, |
| 87 | +fixing a v51.0 regression that affected guests on hosts with |
| 88 | +`io_uring` disabled (e.g. RHEL 9 / CentOS Stream 9, where |
| 89 | +`kernel.io_uring_disabled=2` is a common hardening default) |
| 90 | +(#7817). |
| 91 | + |
| 92 | +Asynchronous QCOW2 Backend with `io_uring` |
| 93 | +----------------------------------------- |
| 94 | + |
| 95 | +A new `QcowDiskAsync` backend uses `io_uring` for data I/O on QCOW2 |
| 96 | +images and is automatically selected when `io_uring` is available |
| 97 | +(falling back to the synchronous backend otherwise). Each virtio |
| 98 | +queue gets its own ring and its own duplicated file descriptor, |
| 99 | +enabling parallel data I/O across queues; QCOW2 metadata is shared |
| 100 | +behind an `Arc<RwLock<_>>` (#7882). |
| 101 | + |
| 102 | +Generic `vhost-user` Device Support |
| 103 | +----------------------------------- |
| 104 | + |
| 105 | +A new generic `vhost-user-generic` device type has been added. |
| 106 | +All information about the device (number of queues, queue size, |
| 107 | +feature bits, etc.) is provided to Cloud Hypervisor via the |
| 108 | +command line or API, allowing arbitrary vhost-user backends to be |
| 109 | +attached without device-type-specific support in the VMM (#7221). |
| 110 | + |
| 111 | +Core Scheduling for vCPU Threads |
| 112 | +-------------------------------- |
| 113 | + |
| 114 | +A new `core_scheduling` option on `--cpus` controls how vCPU threads |
| 115 | +are placed on SMT siblings via the kernel's core-scheduling feature, |
| 116 | +which is useful for mitigating cross-thread side-channel attacks |
| 117 | +without disabling SMT outright. Three modes are supported: `vm` |
| 118 | +(default — all vCPU threads share one cookie), one-cookie-per-vCPU, |
| 119 | +and a configurable grouping mode (#7747). |
| 120 | + |
| 121 | +Snapshot/Restore and Live Migration Improvements |
| 122 | +----------------------------------------------- |
| 123 | + |
| 124 | +* Snapshot and restore now treat the memory backing file as a sparse |
| 125 | + file: on snapshot the backing FD is sought with |
| 126 | + `SEEK_DATA`/`SEEK_HOLE` to skip unallocated regions, and on restore |
| 127 | + the on-disk file is read as sparse. Pages the guest never touched |
| 128 | + remain as holes in the backing file, substantially reducing both |
| 129 | + snapshot size and restore time (#8113). |
| 130 | +* Paused VMs can now be migrated (#8099). |
| 131 | +* User-configurable downtime and timeout parameters for live |
| 132 | + migration (#7835), and improved downtime observability (#7979). |
| 133 | +* A new option to automatically resume the VM on restore, useful |
| 134 | + when restoring from the VMM command line without an API socket |
| 135 | + (#7857). |
| 136 | +* Snapshot/restore support for `vhost-user` devices has been filled |
| 137 | + out (#7908), including migration support for `virtio-fs` (#7937). |
| 138 | +* Vsock connections are now reset on snapshot restore to avoid stale |
| 139 | + half-open connections on the guest side (#7958). |
| 140 | +* The KVM clock is now restored before vCPUs are resumed (#7932), |
| 141 | + and `notify_guest_clock_paused` is called for Hyper-V guests |
| 142 | + (#7933), eliminating clock jumps observed after restore. |
| 143 | +* `vhost-user` devices receive a guest interrupt on resume so that |
| 144 | + in-flight I/O is not stalled across pause/resume (#7851), and |
| 145 | + activated queue eventfds are signaled on resume for all virtio |
| 146 | + devices (#8004). |
| 147 | +* `UFFDIO_WAKE` and `UFFD_FEATURE_MISSING_HUGETLBFS` are now handled |
| 148 | + correctly (#8016). |
| 149 | + |
| 150 | +New Command-Line and API Options |
| 151 | +-------------------------------- |
| 152 | + |
| 153 | +* `--no-shutdown` keeps the VMM process running when the guest |
| 154 | + triggers a shutdown. This is useful for higher-level management |
| 155 | + layers that need full control over the VMM process (#8025). |
| 156 | +* fw_cfg now supports inline string items via |
| 157 | + `--fw-cfg name=...,string=...`, matching QEMU's syntax (#7825). |
| 158 | +* A new per-zone `mergeable` option on `--memory-zone` lets KSM |
| 159 | + merging be controlled per memory zone instead of only globally |
| 160 | + (#7983). |
| 161 | +* Disk lock granularity is now configurable via `--disk` (#7763). |
| 162 | +* `--cpus threads_per_core` is now enforced to be at most two |
| 163 | + (#8078), matching the hardware constraint. |
| 164 | +* `--log-format` controls the log output format, complementing |
| 165 | + existing log-level controls (#8172). Wallclock log timestamps |
| 166 | + now use UTC (#8193). |
| 167 | +* The HTTP API now logs error responses (#8181), and the |
| 168 | + `user_devices` configuration is included in the OpenAPI spec |
| 169 | + (#8072). |
| 170 | + |
| 171 | +MSHV Support Improvements |
| 172 | +------------------------- |
| 173 | + |
| 174 | +* `SVM_EXIT_CPUID`, `SVM_EXIT_MSR`, and `GHCB_MSR_TERM_REQ` handlers |
| 175 | + have been added to the SEV-SNP exit path (#7934). |
| 176 | +* Guest MTRR MSRs are now preserved on KVM (#7944). |
| 177 | +* Nested-virtualization control fixes on AMD (#7783). |
| 178 | + |
| 179 | +Deprecations |
| 180 | +------------ |
| 181 | + |
| 182 | +Auto-detection of disk image types is now deprecated and will be |
| 183 | +removed in a future release. Specify the image type explicitly via |
| 184 | +the `--disk image_type=...` CLI option or the `image_type` field |
| 185 | +on `DiskConfig` in the HTTP/D-Bus API to avoid the deprecation |
| 186 | +warning (#8219). |
| 187 | + |
| 188 | +Notable Bug Fixes |
| 189 | +----------------- |
| 190 | + |
| 191 | +* Fix a guest-triggerable VMM panic via an out-of-bounds |
| 192 | + `queue_select` in the MSI-X vector access path on the virtio PCI |
| 193 | + common config (#7918). |
| 194 | +* Saturate instead of underflowing on a malformed balloon `actual` |
| 195 | + value reported by the guest (#7903). |
| 196 | +* IOMMU address translation now returns errors instead of panicking |
| 197 | + on malformed guest input (#8023). |
| 198 | +* Several virtio device error paths now reset queues instead of |
| 199 | + panicking or exiting the worker (#8128); additional device |
| 200 | + manager paths avoid guest-induced panics (#8186). |
| 201 | +* Virtio barriers are now sized from the number of queues actually |
| 202 | + activated by the guest, fixing pause hangs (#7881). |
| 203 | +* Spec compliance fixes for virtio device config layouts (#7805). |
| 204 | + and other small spec deviations (#8066). Console descriptor-chain |
| 205 | + processing has been fixed (#7802). dword writes to the MSI-X |
| 206 | + control register are now handled (#7956). |
| 207 | +* PCI segment ACPI `_UID` values now match the segment ID (#7992). |
| 208 | +* Fix VHDX multiqueue data corruption (#7746). |
| 209 | +* Fix block-device resize-disk (#7948) and the writeback-mode |
| 210 | + update flow (#7949). |
| 211 | +* Fix vdpa RX failure after device reset by always using base 0 |
| 212 | + (#7964). |
| 213 | +* Fix rebooting with landlock and a pty console (#7911). |
| 214 | +* Reject rate limiting with `vhost-user` (#8135). |
| 215 | +* Fix a deadlock between `CpuManager::pause()` and MMIO writes to |
| 216 | + the ACPI CPU hotplug controller (#7990, #8092). |
| 217 | +* Cancel `vhost-user` reconnection if the device has been unplugged |
| 218 | + (#8182). |
| 219 | +* Remove the API socket path when `start_vmm` fails (#8018). |
| 220 | +* Add missing ID validation for the virtio-rng device (#9a46affc3). |
| 221 | +* Fix UB in `MemoryRangeTable::read_from` (#7828) and `load_igvm()` |
| 222 | + (#8129). |
| 223 | +* `memory_actual_size` reflects hot-plug state, removing a slow |
| 224 | + recomputation path (#7969). |
| 225 | +* DIO alignment is now queried directly from the underlying file |
| 226 | + rather than assumed (#7767). |
| 227 | +* QCOW2 metadata access is now thread-safe with `num_queues > 1` |
| 228 | + (#7744). |
| 229 | +* Block devices unconditionally assume sparse support, matching |
| 230 | + QEMU and avoiding a non-existent probe ioctl (#7757). |
| 231 | +* Multi-value CLI options now use `.action(ArgAction::Append)` so |
| 232 | + that repeating an option appends rather than replacing (#7778). |
| 233 | +* AIO completions are batched in `next_completed_request` for the |
| 234 | + block backend, reducing per-completion overhead (#7864). |
| 235 | +* Roll back the PCI BAR address on a failed `move_bar` so that an |
| 236 | + out-of-range MMIO address programmed by the guest leaves the |
| 237 | + device functional rather than crashing the VMM (#7950). |
| 238 | +* Fix O_DIRECT writes failing with `EINVAL` on the synchronous |
| 239 | + QCOW2 backend (#8012). |
| 240 | +* Fix O_DIRECT reads failing with `EINVAL` on the async `io_uring` |
| 241 | + QCOW2 read path (#8051). |
| 242 | +* Move QCOW2 compressed-cluster decompression out of the metadata |
| 243 | + lock, removing a bottleneck for compressed images (#8061). |
| 244 | +* Clamp the balloon's reported range to its region before |
| 245 | + processing unused pages (#8098). |
| 246 | +* Validate the requested balloon size against total guest RAM |
| 247 | + (#8116). |
| 248 | +* Reject `--memory-zone` configurations that set both `mergeable` |
| 249 | + and `shared` (#8126). |
| 250 | +* Disable sector 0 writes for autodetected VHD images (#8218). |
| 251 | + |
| 252 | +Contributors |
| 253 | +------------ |
| 254 | + |
| 255 | +Many thanks to everyone who has contributed to our release: |
| 256 | + |
| 257 | +* Alyssa Ross <hi@alyssa.is> |
| 258 | +* Anatol Belski <anbelski@linux.microsoft.com> |
| 259 | +* Andrei Vagin <avagin@google.com> |
| 260 | +* Anirudh Rayabharam <anrayabh@microsoft.com> |
| 261 | +* Bo Chen <bchen@crusoe.ai> |
| 262 | +* CMGS <ilskdw@gmail.com> |
| 263 | +* Changyuan Lyu <changyuanl@google.com> |
| 264 | +* Chinmoy <daschinmoyy21@gmail.com> |
| 265 | +* Damian Barabonkov <dbctl@pm.me> |
| 266 | +* Demi Marie Obenour <demiobenour@gmail.com> |
| 267 | +* Dylan Reid <dgreid@dylanreid.com> |
| 268 | +* Dylan Reid <dgreid@fb.com> |
| 269 | +* Emir Beganovic <beganovic.emir@gmail.com> |
| 270 | +* JP Kobryn <inwardvessel@gmail.com> |
| 271 | +* Jared White <git@jaredwhite.dev> |
| 272 | +* Julian Schindel <julian.schindel@cyberus-technology.de> |
| 273 | +* Julian Schindel <mail@arctic-alpaca.de> |
| 274 | +* Keith Adler <kadler@cloudflare.com> |
| 275 | +* Kevin Hui <kevinhui@meta.com> |
| 276 | +* Leander Kohler <leander.kohler@cyberus-technology.de> |
| 277 | +* Max Makarov <maxpain@linux.com> |
| 278 | +* Muminul Islam <muislam@microsoft.com> |
| 279 | +* Nguyen Dinh Phi <phind.uet@gmail.com> |
| 280 | +* Pascal Scholz <pascal.scholz@cyberus-technology.de> |
| 281 | +* Peter Oskolkov <posk@google.com> |
| 282 | +* Philipp Schuster <philipp.schuster@cyberus-technology.de> |
| 283 | +* Rob Bradford <rbradford@meta.com> |
| 284 | +* Roberto Campesato <render@metalabs.org> |
| 285 | +* Ruben Hakobyan <hruben@meta.com> |
| 286 | +* Saravanan D <saravanand@crusoe.ai> |
| 287 | +* Sebastian Eydam <sebastian.eydam@cyberus-technology.de> |
| 288 | +* Sebastian Walz <sebastian.walz@secunet.com> |
| 289 | +* Shayon Mukherjee <shayonj@gmail.com> |
| 290 | +* Souradeep <schakrabarti@microsoft.com> |
| 291 | +* Souradeep Chakrabarti <schakrabarti@microsoft.com> |
| 292 | +* Stepan Rabotkin <epicstyt@gmail.com> |
| 293 | +* Thomas Prescher <thomas.prescher@cyberus-technology.de> |
| 294 | +* Tobias Kässer <t.kaesser@gmail.com> |
| 295 | +* Victor Vieux <vieux@repl.it> |
| 296 | +* Vincent Thomas <vincent@v-thomas.com> |
| 297 | +* Wei Liu <liuwe@microsoft.com> |
| 298 | +* Zhiheng Tao <junchuan.tzh@antgroup.com> |
| 299 | +* dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
| 300 | +* sohakpt <sohakpt@outlook.com> |
| 301 | +* wuxinyue <wuxinyue.wxy@antgroup.com> |
| 302 | +### Download |
| 303 | + See the <a href="https://github.com/cloud-hypervisor/cloud-hypervisor/releases/tag/v52.0">GitHub Release</a> for the release assets. |
0 commit comments