migration: vmstate_save_state_v: fix double error_setg
We may call error_setg twice on same errp if inner vmstate_save_state_v() or vmstate_save_state() call fails. Next we will crash on assertion in error_setv(). Fixes: 848a0503422d043 "migration: Update error description outside migration.c" Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Reviewed-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Peter Xu <peterx@redhat.com> Link: https://lore.kernel.org/qemu-devel/20260304212303.667141-2-vsementsov@yandex-team.ru Signed-off-by: Fabiano Rosas <farosas@suse.de>
Vladimir Sementsov-Ogievskiy committed
Mar 5, 2026 at 00:22 UTC
d41ce10d0f5a3d6e497e4b75807a8e675033c597
1 file changed
+5
-2
migration/vmstate.c
+5
-2
@@ -539,6 +539,9 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
539
} else {
540
ret = inner_field->info->put(f, curr_elem, size,
541
inner_field, vmdesc_loop);
542
+ if (ret < 0) {
543
+ error_setg(errp, "put failed");
544
+ }
545
}
546
547
written_bytes = qemu_file_transferred(f) - old_offset;
@@ -551,8 +554,8 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd,
554
}
555
556
if (ret) {
554
- error_setg(errp, "Save of field %s/%s failed",
555
- vmsd->name, field->name);
557
+ error_prepend(errp, "Save of field %s/%s failed: ",
558
+ vmsd->name, field->name);
559
if (vmsd->post_save) {
560
vmsd->post_save(opaque);
561
}