qemu-cr16/migration
Fabiano Rosas 112b55f0b0 migration/savevm: Add a compatibility check for capabilities
It has always been possible to enable arbitrary migration capabilities
and attempt to take a snapshot of the VM with the savevm/loadvm
commands as well as their QMP counterparts
snapshot-save/snapshot-load.

Most migration capabilities are not meant to be used with snapshots
and there's a risk of crashing QEMU or producing incorrect
behavior. Ideally, every migration capability would either be
implemented for savevm or explicitly rejected.

Add a compatibility check routine and reject the snapshot command if
an incompatible capability is enabled. For now only act on the the two
that actually cause a crash: multifd and mapped-ram.

Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2881
Signed-off-by: Fabiano Rosas <farosas@suse.de>
Link: https://lore.kernel.org/r/20251007184213.5990-1-farosas@suse.de
Signed-off-by: Peter Xu <peterx@redhat.com>
2025-11-03 16:04:09 -05:00
..
block-active.c migration/block-active: Remove global active flag 2025-02-06 14:26:51 +01:00
block-dirty-bitmap.c migration: Rename save_live_complete_precopy to save_complete 2025-07-11 10:37:36 -03:00
channel-block.c qom: Have class_init() take a const data argument 2025-04-25 17:00:41 +02:00
channel-block.h migration: introduce a QIOChannel impl for BlockDriverState VMState 2022-06-22 19:33:43 +01:00
channel.c migration: Fix hang after error in destination setup phase 2025-02-14 15:19:05 -03:00
channel.h migration: check magic value for deciding the mapping of channels 2023-02-06 19:22:57 +01:00
colo-failover.c migration/colo: Improve an x-colo-lost-heartbeat error message 2023-02-23 14:10:17 +01:00
colo-stubs.c migration/colo: make colo_incoming_co() return void 2024-05-22 17:34:31 -03:00
colo.c migration: Update qemu_file_get_return_path() docs and remove dead checks 2025-10-03 09:48:02 -04:00
cpr-exec.c migration: cpr-exec mode 2025-10-03 09:48:02 -04:00
cpr-transfer.c migration: Support fd-based socket address in cpr_transfer_input 2025-06-23 16:03:59 -04:00
cpr.c migration: cpr-exec mode 2025-10-03 09:48:02 -04:00
cpu-throttle.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
dirtyrate.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
dirtyrate.h include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
exec.c migration: simplify exec migration functions 2024-03-04 07:12:40 +01:00
exec.h migration: convert exec backend to accept MigrateAddress. 2023-11-02 11:35:04 +01:00
fd.c migration: Allow pipes to keep working for fd migrations 2024-11-25 16:21:55 -05:00
fd.h migration: Revert mapped-ram multifd support to fd: URI 2024-03-22 12:12:08 -04:00
file.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
file.h migration/multifd: Pass in MultiFDPages_t to file_write_ramblock_iov 2024-09-03 16:24:35 -03:00
global_state.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
meson.build migration: cpr-exec save and load 2025-10-03 09:48:02 -04:00
migration-hmp-cmds.c migration: cpr-exec-command parameter 2025-10-03 09:48:02 -04:00
migration-stats.c migration: migration_rate_limit_reset() don't need the QEMUFile 2023-10-31 08:44:33 +01:00
migration-stats.h migration: Remove transferred atomic counter 2023-10-31 08:44:33 +01:00
migration.c migration: cpr-exec mode 2025-10-03 09:48:02 -04:00
migration.h migration/postcopy: Push blocktime start/end into page req mutex 2025-07-11 10:37:37 -03:00
multifd-device-state.c migration: Rename save_live_complete_precopy_thread to save_complete_precopy_thread 2025-07-11 10:37:39 -03:00
multifd-nocomp.c migration: enable multifd and postcopy together 2025-05-20 11:26:32 -04:00
multifd-qatzip.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd-qpl.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd-uadk.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd-zero-page.c migration: write zero pages when postcopy enabled 2025-05-20 11:26:32 -04:00
multifd-zlib.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd-zstd.c include/system: Move exec/ramblock.h to system/ramblock.h 2025-04-23 14:08:26 -07:00
multifd.c migration/multifd/tls: Cleanup BYE message processing on sender side 2025-10-03 09:48:02 -04:00
multifd.h migration/multifd: move macros to multifd header 2025-05-02 11:09:36 -04:00
options.c migration/savevm: Add a compatibility check for capabilities 2025-11-03 16:04:09 -05:00
options.h migration/savevm: Add a compatibility check for capabilities 2025-11-03 16:04:09 -05:00
page_cache.c migration: Fix cache_init()'s "Failed to allocate" error messages 2021-02-08 11:19:51 +00:00
page_cache.h migration: Clean up signed vs. unsigned XBZRLE cache-size 2021-02-08 11:19:51 +00:00
postcopy-ram.c migration: push Error **errp into ram_postcopy_incoming_init() 2025-10-03 09:48:02 -04:00
postcopy-ram.h migration: push Error **errp into ram_postcopy_incoming_init() 2025-10-03 09:48:02 -04:00
qemu-file.c migration: simplify error reporting after channel read 2025-10-03 09:48:02 -04:00
qemu-file.h migration: qemu_file_set_blocking(): add errp parameter 2025-09-19 12:46:07 +01:00
ram.c system/physmem: Extract API out of 'system/ram_addr.h' header 2025-10-07 05:03:56 +02:00
ram.h migration: push Error **errp into loadvm_process_enable_colo() 2025-10-03 09:48:02 -04:00
rdma.c migration/rdma: Remove qemu_rdma_broken_ipv6_kernel 2025-05-02 11:09:36 -04:00
rdma.h migration: Unfold control_save_page() 2025-05-02 11:09:36 -04:00
savevm.c migration/savevm: Add a compatibility check for capabilities 2025-11-03 16:04:09 -05:00
savevm.h migration: push Error **errp into qemu_loadvm_state_main() 2025-10-03 09:48:02 -04:00
socket.c migration: Remove unused socket_send_channel_create_sync 2024-10-08 15:28:55 -04:00
socket.h migration: Remove unused socket_send_channel_create_sync 2024-10-08 15:28:55 -04:00
threadinfo.c migration/multifd: Protect accesses to migration_threads 2023-07-26 10:55:56 +02:00
threadinfo.h migration/multifd: Protect accesses to migration_threads 2023-07-26 10:55:56 +02:00
tls.c migration: activate TLS thread safety workaround 2025-07-22 19:39:30 -03:00
tls.h migration/multifd: Terminate the TLS connection 2025-02-14 15:19:04 -03:00
trace-events migration: cpr-exec mode 2025-10-03 09:48:02 -04:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
vfio-stub.c migration/vfio: compile only once 2025-09-02 17:57:05 +02:00
vfio.c migration/vfio: compile only once 2025-09-02 17:57:05 +02:00
vmstate-types.c migration: cpr-exec mode 2025-10-03 09:48:02 -04:00
vmstate.c migration: Add error-parameterized function variants in VMSD struct 2025-10-03 09:48:02 -04:00
xbzrle.c migration/xbzrle: Use i386 host/cpuinfo.h 2023-05-23 16:51:18 -07:00
xbzrle.h migration/xbzrle: Use i386 host/cpuinfo.h 2023-05-23 16:51:18 -07:00
yank_functions.c migration/yank: Use channel features 2024-01-29 11:02:12 +08:00
yank_functions.h migration: Move the yank unregister of channel_close out 2021-07-26 12:45:03 +01:00