Skip the header when saving device state, as the header isn't handled by qemu_load_device_state
Signed-off-by: Alexander Oleinik <alx...@bu.edu> --- migration/savevm.c | 9 +++++++-- migration/savevm.h | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/migration/savevm.c b/migration/savevm.c index 79ed44d475..5eac36e6ca 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1405,7 +1405,7 @@ void qemu_savevm_state_cleanup(void) } } -static int qemu_savevm_state(QEMUFile *f, Error **errp) +int qemu_savevm_state(QEMUFile *f, Error **errp) { int ret; MigrationState *ms = migrate_get_current(); @@ -1471,11 +1471,16 @@ void qemu_savevm_live_state(QEMUFile *f) int qemu_save_device_state(QEMUFile *f) { SaveStateEntry *se; - + /* + * qemu_load_device_state doesn't load the header. Either skip writing the + * header or seek forward in the file, prior to loading device state + */ +#ifndef CONFIG_FUZZ if (!migration_in_colo_state()) { qemu_put_be32(f, QEMU_VM_FILE_MAGIC); qemu_put_be32(f, QEMU_VM_FILE_VERSION); } +#endif cpu_synchronize_all_states(); QTAILQ_FOREACH(se, &savevm_state.handlers, entry) { diff --git a/migration/savevm.h b/migration/savevm.h index 51a4b9caa8..5405215cb4 100644 --- a/migration/savevm.h +++ b/migration/savevm.h @@ -64,4 +64,6 @@ void qemu_loadvm_state_cleanup(void); int qemu_loadvm_state_main(QEMUFile *f, MigrationIncomingState *mis); int qemu_load_device_state(QEMUFile *f); +int qemu_savevm_state(QEMUFile *f, Error **errp); + #endif -- 2.20.1