[lxc-devel] clone: clear the rootfs out of unexpanded config

Stéphane Graber stgraber at ubuntu.com
Tue Nov 17 16:38:27 UTC 2015


On Wed, Nov 11, 2015 at 05:13:25PM +0000, Serge Hallyn wrote:
> Closes #694
> 
> When we start cloning container c1 to c2, we first save c1's
> configuration in c2's as a starting point.  We long ago cleared
> out the lxc.rootfs entry before saving it, so that if we are
> killed before we update the rootfs, c2's rootfs doesn't point
> to c1's.  Because then lxc-destroy -n c2 would delete c1's rootfs.
> 
> But when we introduced the unexpanded_config, we didn't update
> this code to clear the rootfs out of the unexpanded_config, which
> is what now actually gets saved in write_config().
> 
> Do so.
> 
> Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>

Acked-by: Stéphane Graber <stgraber at ubuntu.com>

> ---
>  src/lxc/lxccontainer.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index 5207255..adc29c5 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -3057,7 +3057,7 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char
>  	struct lxc_container *c2 = NULL;
>  	char newpath[MAXPATHLEN];
>  	int ret, storage_copied = 0;
> -	char *origroot = NULL;
> +	char *origroot = NULL, *saved_unexp_conf = NULL;
>  	struct clone_update_data data;
>  	FILE *fout;
>  	pid_t pid;
> @@ -3104,9 +3104,20 @@ static struct lxc_container *do_lxcapi_clone(struct lxc_container *c, const char
>  		SYSERROR("open %s", newpath);
>  		goto out;
>  	}
> +
> +	saved_unexp_conf = c->lxc_conf->unexpanded_config;
> +	c->lxc_conf->unexpanded_config = strdup(saved_unexp_conf);
> +	if (!c->lxc_conf->unexpanded_config) {
> +		ERROR("Out of memory");
> +		goto out;
> +	}
> +	clear_unexp_config_line(c->lxc_conf, "lxc.rootfs", false);
>  	write_config(fout, c->lxc_conf);
>  	fclose(fout);
>  	c->lxc_conf->rootfs.path = origroot;
> +	free(c->lxc_conf->unexpanded_config);
> +	c->lxc_conf->unexpanded_config = saved_unexp_conf;
> +	saved_unexp_conf = NULL;
>  
>  	sprintf(newpath, "%s/%s/rootfs", lxcpath, newname);
>  	if (mkdir(newpath, 0755) < 0) {
> -- 
> 2.5.0
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel

-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20151117/87aed8b6/attachment.sig>


More information about the lxc-devel mailing list