From: Stéphane Graber Date: Wed, 12 Feb 2014 20:33:57 +0000 (-0500) Subject: coverity: Free bdev in clone_update_rootfs X-Git-Tag: lxc-1.0.0.rc1~27 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e7de366c67fd6f9f0b0675c1d6d8428d3834eaf2;p=thirdparty%2Flxc.git coverity: Free bdev in clone_update_rootfs Signed-off-by: Stéphane Graber Acked-by: Serge E. Hallyn --- 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; }