qemu/migration
Fabiano Rosas 86d7b08d71 block-migration: Ensure we don't crash during migration cleanup
We can fail the blk_insert_bs() at init_blk_migration(), leaving the
BlkMigDevState without a dirty_bitmap and BlockDriverState. Account
for the possibly missing elements when doing cleanup.

Fix the following crashes:

Thread 1 "qemu-system-x86" received signal SIGSEGV, Segmentation fault.
0x0000555555ec83ef in bdrv_release_dirty_bitmap (bitmap=0x0) at ../block/dirty-bitmap.c:359
359         BlockDriverState *bs = bitmap->bs;
 #0  0x0000555555ec83ef in bdrv_release_dirty_bitmap (bitmap=0x0) at ../block/dirty-bitmap.c:359
 #1  0x0000555555bba331 in unset_dirty_tracking () at ../migration/block.c:371
 #2  0x0000555555bbad98 in block_migration_cleanup_bmds () at ../migration/block.c:681

Thread 1 "qemu-system-x86" received signal SIGSEGV, Segmentation fault.
0x0000555555e971ff in bdrv_op_unblock (bs=0x0, op=BLOCK_OP_TYPE_BACKUP_SOURCE, reason=0x0) at ../block.c:7073
7073        QLIST_FOREACH_SAFE(blocker, &bs->op_blockers[op], list, next) {
 #0  0x0000555555e971ff in bdrv_op_unblock (bs=0x0, op=BLOCK_OP_TYPE_BACKUP_SOURCE, reason=0x0) at ../block.c:7073
 #1  0x0000555555e9734a in bdrv_op_unblock_all (bs=0x0, reason=0x0) at ../block.c:7095
 #2  0x0000555555bbae13 in block_migration_cleanup_bmds () at ../migration/block.c:690

Signed-off-by: Fabiano Rosas <farosas@suse.de>
Message-id: 20230731203338.27581-1-farosas@suse.de
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
(cherry picked from commit f187609f27)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
2023-09-21 19:35:19 +03:00
..
block-dirty-bitmap.c migration: Move rate_limit_max and rate_limit_used to migration_stats 2023-05-18 18:40:51 +02:00
block.c block-migration: Ensure we don't crash during migration cleanup 2023-09-21 19:35:19 +03:00
block.h
channel-block.c io: Add support for MSG_PEEK for socket channel 2023-02-06 19:22:56 +01:00
channel-block.h migration: introduce a QIOChannel impl for BlockDriverState VMState 2022-06-22 19:33:43 +01:00
channel.c migration: check magic value for deciding the mapping of channels 2023-02-06 19:22:57 +01: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.c migration: process_incoming_migration_co(): move colo part to colo 2023-05-18 18:40:51 +02:00
dirtyrate.c migration: Add last stage indicator to global dirty log 2023-05-18 08:53:50 +02:00
dirtyrate.h migration/dirtyrate: Refactor dirty page rate calculation 2022-07-20 12:15:08 +01:00
exec.c *: Add missing includes of qemu/error-report.h 2023-03-22 15:06:57 +00:00
exec.h
fd.c bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
fd.h
global_state.c migration: never fail in global_state_store() 2023-06-02 01:03:19 +02:00
meson.build meson: Replace softmmu_ss -> system_ss 2023-06-20 10:01:30 +02:00
migration-hmp-cmds.c migration: Extend query-migrate to provide dirty page limit info 2023-07-26 10:55:56 +02:00
migration-stats.c migration: spelling fixes 2023-07-25 17:13:20 +03:00
migration-stats.h migration: We don't need the field rate_limit_used anymore 2023-05-18 18:40:51 +02:00
migration.c migration: Update error description whenever migration fails 2023-07-26 10:55:56 +02:00
migration.h migration: spelling fixes 2023-07-25 17:13:20 +03:00
multifd-zlib.c migration: spelling fixes 2023-07-25 17:13:20 +03:00
multifd-zstd.c migration: spelling fixes 2023-07-25 17:13:20 +03:00
multifd.c migration/multifd: Rename threadinfo.c functions 2023-07-26 10:55:56 +02:00
multifd.h multifd: Add the ramblock to MultiFDRecvParams 2023-05-10 18:48:11 +02:00
options.c migration: enforce multifd and postcopy preempt to be set before incoming 2023-07-26 10:55:56 +02:00
options.h migration: Introduce dirty-limit capability 2023-07-26 10:55:56 +02:00
page_cache.c
page_cache.h
postcopy-ram.c migration/ram: Expose ramblock_is_ignored() as migrate_ram_is_ignored() 2023-07-12 09:25:37 +02:00
postcopy-ram.h migration: Allow postcopy_ram_supported_by_host() to report err 2023-04-27 10:18:25 +02:00
qemu-file.c migration/rdma: Split qemu_fopen_rdma() into input/output functions 2023-07-26 10:55:56 +02:00
qemu-file.h migration/rdma: Split qemu_fopen_rdma() into input/output functions 2023-07-26 10:55:56 +02:00
ram-compress.c ram-compress.c: Make target independent 2023-05-08 15:25:26 +02:00
ram-compress.h ram.c: Move core decompression code into its own file 2023-05-08 15:25:26 +02:00
ram.c migration: Implement dirty-limit convergence algo 2023-07-26 10:55:56 +02:00
ram.h migration/ram: Expose ramblock_is_ignored() as migrate_ram_is_ignored() 2023-07-12 09:25:37 +02:00
rdma.c migration/rdma: Split qemu_fopen_rdma() into input/output functions 2023-07-26 10:55:56 +02:00
rdma.h
savevm.c migration: Change qemu_file_transferred to noflush 2023-07-26 10:55:56 +02:00
savevm.h migration: Implement switchover ack logic 2023-06-30 06:02:51 +02:00
socket.c migration: Move migrate_use_zero_copy_send() to options.c 2023-04-24 15:01:46 +02:00
socket.h migration: Postcopy preemption preparation on channel creation 2022-07-20 12:15:08 +01:00
target.c vfio/migration: Reset bytes_transferred properly 2023-06-30 06:02:51 +02: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: Drop unused parameter for migration_tls_client_create() 2023-05-03 11:24:20 +02:00
tls.h migration: Drop unused parameter for migration_tls_client_create() 2023-05-03 11:24:20 +02:00
trace-events migration: Implement dirty-limit convergence algo 2023-07-26 10:55:56 +02:00
trace.h
vmstate-types.c
vmstate.c qemu-file: Rename qemu_file_transferred_ fast -> noflush 2023-07-26 10:55:56 +02: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 bulk: Remove pointless QOM casts 2023-06-05 20:48:34 +02:00
yank_functions.h