]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: Fix possible crash in mnt_context_setup_loopdev()
authorStanislav Brabec <sbrabec@suse.cz>
Thu, 14 Jul 2016 13:28:29 +0000 (15:28 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 3 Aug 2016 09:53:28 +0000 (11:53 +0200)
If loopcxt_init() fails, Iloopcxt_deinit() should not be called.

Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
libmount/src/context_loopdev.c

index 836ebc1d3884e890f1f360679107484d5bfb4c9d..75306321901e45739523e45bad83f881d166285f 100644 (file)
@@ -217,7 +217,7 @@ int mnt_context_setup_loopdev(struct libmnt_context *cxt)
        */
        rc = loopcxt_init(&lc, 0);
        if (rc)
-               goto done;
+               goto done_no_deinit;
        if (backing_file && !(loopcxt_find_by_backing_file(&lc,
                        backing_file, offset, LOOPDEV_FL_OFFSET))) {
                DBG(LOOP, ul_debugobj(cxt, "using existing loop device %s",
@@ -234,7 +234,9 @@ int mnt_context_setup_loopdev(struct libmnt_context *cxt)
        loopcxt_deinit(&lc);
 
        rc = loopcxt_init(&lc, 0);
-       if (rc == 0 && loopval) {
+       if (rc)
+               goto done_no_deinit;
+       if (loopval) {
                rc = loopcxt_set_device(&lc, loopval);
                if (rc == 0)
                        loopdev = loopcxt_get_device(&lc);