[libvirt] [PATCH] Introduce yet another migration version in API.

Eric Blake eblake at redhat.com
Wed Nov 3 15:18:18 UTC 2010


On 11/02/2010 07:08 AM, Daniel P. Berrange wrote:
> +static virDomainPtr
> +virDomainMigrateVersion3 (virDomainPtr domain,
> +                          virConnectPtr dconn,
> +                          unsigned long flags,
> +                          const char *dname,
> +                          const char *uri,
> +                          unsigned long bandwidth)
> +{
> +    virDomainPtr ddomain = NULL;
> +    char *uri_out = NULL;
> +    char *cookiesrc = NULL;
> +    char *cookiedst = NULL;
> +    char *dom_xml = NULL;
> +    int cookiesrclen = 0;
> +    int cookiedstlen = 0;
> +    int ret;
> +    virDomainInfo info;
> +    virErrorPtr orig_err = NULL;
> +
> +    if (!domain->conn->driver->domainMigrateBegin3) {
> +        virLibConnError (domain->conn, VIR_ERR_INTERNAL_ERROR, __FUNCTION__);
> +        virDispatchError(domain->conn);
> +        return NULL;
> +    }

Do we ever have a step (either here, or when a driver is registered)
that ensures that if domainMigrateBegin3 exists, then all 5
domainMigrate*3 functions exist?  Otherwise, a dlopen()'d driver could
crash libvirt by maliciously supplying one but not all 5 functions.

> +
> +    if (uri == NULL && uri_out == NULL) {
> +        virLibConnError (domain->conn, VIR_ERR_INTERNAL_ERROR,
> +                         _("domainMigratePrepare2 did not set uri"));
> +        virDispatchError(domain->conn);
> +        goto done;
> +    }
> +    if (uri_out)
> +        uri = uri_out; /* Did domainMigratePrepare2 change URI? */
> +    assert (uri != NULL);

Do we really want assert() here?  If someone compiles with NDEBUG, would
that let us fall through and dereference NULL?

> @@ -3716,6 +3875,11 @@ virDomainMigrate (virDomainPtr domain,
>                   VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn,
>                                            VIR_DRV_FEATURE_MIGRATION_V2))
>              ddomain = virDomainMigrateVersion2(domain, dconn, flags, dname, uri, bandwidth);
> +        else if (VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn,
> +                                          VIR_DRV_FEATURE_MIGRATION_V3) &&
> +                 VIR_DRV_SUPPORTS_FEATURE(dconn->driver, dconn,
> +                                          VIR_DRV_FEATURE_MIGRATION_V3))
> +            ddomain = virDomainMigrateVersion3(domain, dconn, flags, dname, uri, bandwidth);

Should migrateVersion3 be attempted with a higher priority than
version2?  As written, this attempts version2 first, so you'll never get
the benefits of version3.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20101103/86e0d6d4/attachment-0001.sig>


More information about the libvir-list mailing list