On Wed, 11 Mar 2026 at 18:47, Sergei Heifetz <[email protected]> wrote:
> Reorder the code so the assertion of mis->from_src_file occurs before
> the call to migration_ioc_unregister_yank_from_file, which dereferences
> it in qemu_file_get_ioc.
>
> Fixes: 39675ffffb3394 ("migration: Move the yank unregister of channel_close
> out")
> Signed-off-by: Sergei Heifetz <[email protected]>
> Reviewed-by: Laurent Vivier <[email protected]>
> ---
> migration/savevm.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 3dc812a7bbb..930a3391e35 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -2885,13 +2885,14 @@ static bool
> postcopy_pause_incoming(MigrationIncomingState *mis)
>
> assert(migrate_postcopy_ram());
>
> + assert(mis->from_src_file);
> +
> /*
> * Unregister yank with either from/to src would work, since ioc behind
> it
> * is the same
> */
> migration_ioc_unregister_yank_from_file(mis->from_src_file);
>
> - assert(mis->from_src_file);
> qemu_file_shutdown(mis->from_src_file);
> qemu_fclose(mis->from_src_file);
> mis->from_src_file = NULL;
* Change looks okay. But is it really possible that we reach the
Postcopy pause step with mis->from/to_src_file = NULL?
Maybe we could move the following 'assert(mis->to_src_file);' to
the top too? Make it fail early before any call(s) further.
===
diff --git a/migration/savevm.c b/migration/savevm.c
index 197c89e0e6..18264feaac 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2874,6 +2874,8 @@ static bool
postcopy_pause_incoming(MigrationIncomingState *mis)
trace_postcopy_pause_incoming();
assert(migrate_postcopy_ram());
+ assert(mis->from_src_file);
+ assert(mis->to_src_file);
/*
* Unregister yank with either from/to src would work, since ioc behind it
@@ -2881,12 +2883,10 @@ static bool
postcopy_pause_incoming(MigrationIncomingState *mis)
*/
migration_ioc_unregister_yank_from_file(mis->from_src_file);
- assert(mis->from_src_file);
qemu_file_shutdown(mis->from_src_file);
qemu_fclose(mis->from_src_file);
mis->from_src_file = NULL;
- assert(mis->to_src_file);
qemu_file_shutdown(mis->to_src_file);
qemu_mutex_lock(&mis->rp_mutex);
qemu_fclose(mis->to_src_file);
===
Thank you.
---
- Prasad