From: Stanislav Brabec Date: Thu, 14 Jul 2016 13:28:29 +0000 (+0200) Subject: libmount: Fix possible crash in mnt_context_setup_loopdev() X-Git-Tag: v2.29-rc1~134^2~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=441cdba95b1344a5bf4ce4f490bce416cc85f7d7;p=thirdparty%2Futil-linux.git libmount: Fix possible crash in mnt_context_setup_loopdev() If loopcxt_init() fails, Iloopcxt_deinit() should not be called. Signed-off-by: Stanislav Brabec --- diff --git a/libmount/src/context_loopdev.c b/libmount/src/context_loopdev.c index 836ebc1d38..7530632190 100644 --- a/libmount/src/context_loopdev.c +++ b/libmount/src/context_loopdev.c @@ -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);