[libvirt] PATCH 4/4: support FS template config

Jim Meyering jim at meyering.net
Thu Oct 16 09:28:40 UTC 2008


"Daniel P. Berrange" <berrange at redhat.com> wrote:
> The root filesystem for an openvz guest is defined from a template name.
> We support this when creating a new guest, but never include this info
> when dumping the XML. Thsi patch addresses this problem by reading the
> OSTEMPLATE config parameter
>
> diff -r e0c166ce24bd src/openvz_conf.c
> --- a/src/openvz_conf.c	Tue Oct 14 15:46:24 2008 +0100
> +++ b/src/openvz_conf.c	Tue Oct 14 15:49:41 2008 +0100
> @@ -308,6 +308,47 @@ error:
>  }
>
>
> +static int
> +openvzReadFSConf(virConnectPtr conn,
> +                 virDomainDefPtr def,
> +                 int veid) {
> +    int ret;
> +    virDomainFSDefPtr fs;

This needs to be initialized here or in the 'if' block.
Otherwise, it will be freed uninitialized upon read failure:

       virDomainFSDefPtr fs = NULL;

> +    char temp[4096];
> +
> +    ret = openvzReadConfigParam(veid, "OSTEMPLATE", temp, sizeof(temp));
> +    if (ret < 0) {
> +        openvzError(conn, VIR_ERR_INTERNAL_ERROR,
> +                    _("Cound not read 'OSTEMPLATE' from config for container %d"),
> +                    veid);
> +        goto error;
> +    } else if (ret > 0) {
> +        if (VIR_ALLOC(fs) < 0)
> +            goto no_memory;
> +
> +        fs->type = VIR_DOMAIN_FS_TYPE_TEMPLATE;
> +        fs->src = strdup(temp);
> +        fs->dst = strdup("/");
> +
> +        if (fs->src == NULL || fs->dst == NULL)
> +            goto no_memory;
> +
> +        if (VIR_REALLOC_N(def->fss, def->nfss + 1) < 0)
> +            goto no_memory;
> +        def->fss[def->nfss++] = fs;
> +        fs = NULL;
> +
> +    }
> +
> +    return 0;
> +no_memory:
> +    openvzError(conn, VIR_ERR_NO_MEMORY, NULL);
> +error:
> +    virDomainFSDefFree(fs);
> +    return -1;
> +}
> +
> +
>  /* Free all memory associated with a openvz_driver structure */
>  void
>  openvzFreeDriver(struct openvz_driver *driver)
> @@ -393,6 +434,7 @@ int openvzLoadDomains(struct openvz_driv
>          /* XXX load rest of VM config data .... */
>
>          openvzReadNetworkConf(NULL, dom->def, veid);
> +        openvzReadFSConf(NULL, dom->def, veid);
>
>          if (VIR_REALLOC_N(driver->domains.objs,
>                            driver->domains.count + 1) < 0)




More information about the libvir-list mailing list