]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
coverity: Free bdev in clone_update_rootfs
authorStéphane Graber <stgraber@ubuntu.com>
Wed, 12 Feb 2014 20:33:57 +0000 (15:33 -0500)
committerStéphane Graber <stgraber@ubuntu.com>
Wed, 12 Feb 2014 22:02:35 +0000 (17:02 -0500)
Signed-off-by: Stéphane Graber <stgraber@ubuntu.com>
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
src/lxc/lxccontainer.c

index 51e0ac575b76c902535b1c5e8518c998d090f987..a25c1961dbc06a96194e473cd754a81b2167084d 100644 (file)
@@ -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;
 }