Re: [PATCH] qemu: fix libvirtd crash in migration after vm shutdown

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 02, 2016 at 02:20:51 +0000, weifuqiang wrote:
> [PATCH] qemu: fix libvirtd crash in migration after vm shutdown
> 
> 
> 
> 
> 
> If we shutdown a guest, then migrate it without the arg XML, libvirtd will get crashed.
> 
> 
> 
> The reason is that:
> 
> 1 during shutdown callback, qemuProcessStop() , it points vm->def  to vm->newDef
> 
> 2 during migration, it frees persistentDef, which points to vm->newDef when the arg XML is NULL.
> 
>    However, because vm->newDef is now vm->def, what we IN FACT freed is vm->def.
> 
> 3 it will refer to vm->def after step2, thus invalid read/write causes libvirtd crash
> 
> 
> 
> We needn't to free persistentDef if persist_xml is NULL, because no extra def was alloced if persistent_xml is NULL.
> 
> 
> ---
> src/qemu/qemu_migration.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 6a683f7..3636c93 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -4915,7 +4915,7 @@ qemuMigrationRun(virQEMUDriverPtr driver,
>          VIR_WARN("Unable to encode migration cookie");
>      }
> -    if (persistDef != vm->newDef)
> +    if (persist_xml && persistDef)
>          virDomainDefFree(persistDef);
>      qemuMigrationCookieFree(mig);

If persist_xml != NULL then persistDef is it's parsed version (or NULL)
and we need to free it. Otherwise it's just a copy of another pointer.
In other words, your patch is correct (although checking for persist_xml
is enough).

An alternative solution would be to make sure we can always free
persistDef by making a copy of vm->newDef rather than copying just the
pointer and free it unconditionally.

Anyway, your patch is good enough. ACK.

I'll push it later.

Jirka

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]