[libvirt] [PATCH 0/2] Fix migration with implicit controllers (user-alias saga)

*** GLUTEN-FREE BLURB *** Ján Tomko (2): virDomainDeviceAliasIsUserAlias: tolerate NULL qemu: do not drop implicit controllers with non-implicit attributes src/conf/domain_conf.c | 2 +- src/qemu/qemu_domain.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) -- 2.13.6

Do not crash in virDomainDeviceInfoParseXML if someone provides an 'alias' element without a 'name' attribute. Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_conf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 43725155c..d289ca2d0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6702,7 +6702,7 @@ virDomainDeviceAddressParseXML(xmlNodePtr address, bool virDomainDeviceAliasIsUserAlias(const char *aliasStr) { - return STRPREFIX(aliasStr, USER_ALIAS_PREFIX); + return aliasStr && STRPREFIX(aliasStr, USER_ALIAS_PREFIX); } -- 2.13.6

On 03/25/2018 09:28 PM, Ján Tomko wrote:
Do not crash in virDomainDeviceInfoParseXML if someone provides an 'alias' element without a 'name' attribute.
Signed-off-by: Ján Tomko <jtomko@redhat.com> --- src/conf/domain_conf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 43725155c..d289ca2d0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6702,7 +6702,7 @@ virDomainDeviceAddressParseXML(xmlNodePtr address, bool virDomainDeviceAliasIsUserAlias(const char *aliasStr) { - return STRPREFIX(aliasStr, USER_ALIAS_PREFIX); + return aliasStr && STRPREFIX(aliasStr, USER_ALIAS_PREFIX); }
ACK with this squashed in: diff --git i/src/conf/domain_conf.c w/src/conf/domain_conf.c index d289ca2d08..ae7c0d9b71 100644 --- i/src/conf/domain_conf.c +++ w/src/conf/domain_conf.c @@ -5573,7 +5573,7 @@ virDomainDeviceDefValidateAliasesIterator(virDomainDefPtr def, struct virDomainDefValidateAliasesData *data = opaque; const char *alias = info->alias; - if (!alias || !virDomainDeviceAliasIsUserAlias(alias)) + if (!virDomainDeviceAliasIsUserAlias(alias)) return 0; /* Some crazy backcompat for consoles. */ Michal

If someone set a user alias or pcihole64 on an implicit controller, we need to format it to migrate the domain properly. Signed-off-by: Ján Tomko <jtomko@redhat.com> Reported-by: Joseph Richard <Joseph.Richard@windriver.com> --- src/qemu/qemu_domain.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 4aaf617da..580e0f830 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6181,7 +6181,8 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver, if (ARCH_IS_X86(def->os.arch) && qemuDomainIsI440FX(def) && usb && usb->idx == 0 && (usb->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_DEFAULT || - usb->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI)) { + usb->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_PIIX3_UHCI) && + !virDomainDeviceAliasIsUserAlias(usb->info.alias)) { VIR_DEBUG("Removing default USB controller from domain '%s'" " for migration compatibility", def->name); toremove++; @@ -6202,7 +6203,9 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver, } if (pci && pci->idx == 0 && - pci->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) { + pci->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT && + !virDomainDeviceAliasIsUserAlias(pci->info.alias) && + !pci->opts.pciopts.pcihole64) { VIR_DEBUG("Removing default pci-root from domain '%s'" " for migration compatibility", def->name); toremove++; -- 2.13.6

On 03/25/2018 09:29 PM, Ján Tomko wrote:
If someone set a user alias or pcihole64 on an implicit controller, we need to format it to migrate the domain properly.
Signed-off-by: Ján Tomko <jtomko@redhat.com> Reported-by: Joseph Richard <Joseph.Richard@windriver.com> --- src/qemu/qemu_domain.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
ACK Michal
participants (2)
-
Ján Tomko
-
Michal Privoznik