From 176d9acb2ec17211a0d69bd2bd99f914fad8d7ad Mon Sep 17 00:00:00 2001 From: Serge Hallyn Date: Fri, 21 Jun 2013 14:16:42 -0500 Subject: [PATCH] api_clone: don't remove storage if we haven't created it In the best case we'll get errors about failing to remove it. In the worst case we'll be trying to delete the original container's rootfs. Reported-by: zoolook Signed-off-by: Serge Hallyn --- src/lxc/lxccontainer.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index b6d5b2ff5..677fa561e 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -1866,7 +1866,7 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname, { struct lxc_container *c2 = NULL; char newpath[MAXPATHLEN]; - int ret; + int ret, storage_copied = 0; const char *n, *l; FILE *fout; @@ -1948,6 +1948,10 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname, if (ret < 0) goto out; + // We've now successfully created c2's storage, so clear it out if we + // fail after this + storage_copied = 1; + if (!c2->save_config(c2, NULL)) goto out; @@ -1961,6 +1965,8 @@ struct lxc_container *lxcapi_clone(struct lxc_container *c, const char *newname, out: container_mem_unlock(c); if (c2) { + if (!storage_copied) + c2->lxc_conf->rootfs.path = NULL; c2->destroy(c2); lxc_container_put(c2); }