From e7de366c67fd6f9f0b0675c1d6d8428d3834eaf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= Date: Wed, 12 Feb 2014 15:33:57 -0500 Subject: [PATCH] coverity: Free bdev in clone_update_rootfs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber Acked-by: Serge E. Hallyn --- src/lxc/lxccontainer.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 51e0ac575..a25c1961d 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -2498,10 +2498,13 @@ static int clone_update_rootfs(struct clone_update_data *data) if (strcmp(bdev->type, "dir") != 0) { if (unshare(CLONE_NEWNS) < 0) { ERROR("error unsharing mounts"); + bdev_put(bdev); return -1; } - if (bdev->ops->mount(bdev) < 0) + if (bdev->ops->mount(bdev) < 0) { + bdev_put(bdev); return -1; + } } else { // TODO come up with a better way if (bdev->dest) free(bdev->dest); @@ -2528,12 +2531,15 @@ static int clone_update_rootfs(struct clone_update_data *data) if (run_lxc_hooks(c->name, "clone", conf, c->get_config_path(c), hookargs)) { ERROR("Error executing clone hook for %s", c->name); + bdev_put(bdev); return -1; } } if (!(flags & LXC_CLONE_KEEPNAME)) { ret = snprintf(path, MAXPATHLEN, "%s/etc/hostname", bdev->dest); + bdev_put(bdev); + if (ret < 0 || ret >= MAXPATHLEN) return -1; if (!file_exists(path)) @@ -2549,6 +2555,9 @@ static int clone_update_rootfs(struct clone_update_data *data) if (fclose(fout) < 0) return -1; } + else + bdev_put(bdev); + return 0; }