From: Vladimir Sementsov-Ogievskiy <[email protected]> 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 <[email protected]> Reviewed-by: Fabiano Rosas <[email protected]> Reviewed-by: Peter Xu <[email protected]> Link: https://lore.kernel.org/qemu-devel/[email protected] Signed-off-by: Fabiano Rosas <[email protected]> (cherry picked from commit d41ce10d0f5a3d6e497e4b75807a8e675033c597) Signed-off-by: Michael Tokarev <[email protected]> diff --git a/migration/vmstate.c b/migration/vmstate.c index 5feaa3244d..37316d2833 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -499,6 +499,9 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, } else { ret = inner_field->info->put(f, curr_elem, size, inner_field, vmdesc_loop); + if (ret < 0) { + error_setg(errp, "put failed"); + } } written_bytes = qemu_file_transferred(f) - old_offset; @@ -511,8 +514,8 @@ int vmstate_save_state_v(QEMUFile *f, const VMStateDescription *vmsd, } if (ret) { - error_setg(errp, "Save of field %s/%s failed", - vmsd->name, field->name); + error_prepend(errp, "Save of field %s/%s failed: ", + vmsd->name, field->name); if (vmsd->post_save) { vmsd->post_save(opaque); } -- 2.47.3
