mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
qemuMigrationDstPrepareAny: Parse cookie before adding domain onto list
There are some checks done when parsing a migration cookie. For instance, one of the checks ensures that the domain is not being migrated onto the same host. If that is the case, then we are in big trouble because the @vm is the same domain object used by source and it has some jobs sets and everything so recovering from failed cookie parsing would be needlessly hard. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
1a07aca24a
commit
ee32939fff
@ -2395,6 +2395,20 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver,
|
||||
}
|
||||
}
|
||||
|
||||
/* Parse cookie earlier than adding the domain onto the
|
||||
* domain list. Parsing/validation may fail and there's no
|
||||
* point in having the domain in the list at that point. */
|
||||
if (!(mig = qemuMigrationEatCookie(driver, *def, origname, NULL,
|
||||
cookiein, cookieinlen,
|
||||
QEMU_MIGRATION_COOKIE_LOCKSTATE |
|
||||
QEMU_MIGRATION_COOKIE_NBD |
|
||||
QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG |
|
||||
QEMU_MIGRATION_COOKIE_CPU_HOTPLUG |
|
||||
QEMU_MIGRATION_COOKIE_CPU |
|
||||
QEMU_MIGRATION_COOKIE_ALLOW_REBOOT |
|
||||
QEMU_MIGRATION_COOKIE_CAPS)))
|
||||
goto cleanup;
|
||||
|
||||
if (!(vm = virDomainObjListAdd(driver->domains, *def,
|
||||
driver->xmlopt,
|
||||
VIR_DOMAIN_OBJ_LIST_ADD_LIVE |
|
||||
@ -2412,17 +2426,6 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver,
|
||||
priv->hookRun = true;
|
||||
}
|
||||
|
||||
if (!(mig = qemuMigrationEatCookie(driver, vm->def, origname, priv,
|
||||
cookiein, cookieinlen,
|
||||
QEMU_MIGRATION_COOKIE_LOCKSTATE |
|
||||
QEMU_MIGRATION_COOKIE_NBD |
|
||||
QEMU_MIGRATION_COOKIE_MEMORY_HOTPLUG |
|
||||
QEMU_MIGRATION_COOKIE_CPU_HOTPLUG |
|
||||
QEMU_MIGRATION_COOKIE_CPU |
|
||||
QEMU_MIGRATION_COOKIE_ALLOW_REBOOT |
|
||||
QEMU_MIGRATION_COOKIE_CAPS)))
|
||||
goto cleanup;
|
||||
|
||||
if (STREQ_NULLABLE(protocol, "rdma") &&
|
||||
!virMemoryLimitIsSet(vm->def->mem.hard_limit)) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
|
Loading…
x
Reference in New Issue
Block a user