]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
fuse2fs: free global_fs after a failed ext2fs_close call
authorDarrick J. Wong <djwong@kernel.org>
Tue, 2 Sep 2025 18:02:43 +0000 (11:02 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Fri, 17 Oct 2025 23:34:21 +0000 (16:34 -0700)
If ext2fs_close fails for any reason, it won't free the ext2_filsys
object or any of the other things that hang off of it, like the io
managers and whatnot.  Right now this results in a memory leak of
global_fs, which is mostly benign because we're nearly to the end of
main() anyway.

However, a future patch will move the ext2fs_close call to op_destroy
prior to introducing iomap support, which means that we won't close
the (O_EXCL) block device before returning from umount, which will cause
problems with fstests and the user expectation that block devices are
closed when umount(8) returns.

Therefore, free the context after a failed close.

Cc: <linux-ext4@vger.kernel.org> # v1.43.7
Fixes: 6ae16a6814f47c ("misc: clean up error handling for ext2fs_run_ext3_journal()")
Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
misc/fuse2fs.c

index 4d92e1e818b1c4574032ef167d613649604fcc8a..0a862ea086cbde299ac0cb39b2d23c75e4905672 100644 (file)
@@ -4904,10 +4904,9 @@ out:
                fflush(orig_stderr);
        }
        if (global_fs) {
-               err = ext2fs_close(global_fs);
+               err = ext2fs_close_free(&global_fs);
                if (err)
                        com_err(argv[0], err, "while closing fs");
-               global_fs = NULL;
        }
        if (fctx.lockfile) {
                if (unlink(fctx.lockfile)) {