Skip to content

Commit 4b36ea4

Browse files
committed
content: blog: Release v52.0
Signed-off-by: Bo Chen <bchen@crusoe.ai>
1 parent 2e9944b commit 4b36ea4

1 file changed

Lines changed: 303 additions & 0 deletions

File tree

content/en/blog/v52.0/index.md

Lines changed: 303 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,303 @@
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

Comments
 (0)