erofs-utils: fix reference leak in erofs_mkfs_build_tree_from_path()
authorGao Xiang <xiang@kernel.org>
Thu, 19 Oct 2023 22:43:28 +0000 (06:43 +0800)
committerGao Xiang <xiang@kernel.org>
Thu, 19 Oct 2023 22:50:53 +0000 (06:50 +0800)
commit 8cbc205185a1 ("erofs-utils: mkfs: fix corrupted directories
with hardlinks") introduced a reference leak although it has no real
impact to users.  Fix it now.

Signed-off-by: Gao Xiang <xiang@kernel.org>
Link: https://lore.kernel.org/r/20231019224328.26015-1-xiang@kernel.org
lib/inode.c

index 71af396131461a0491a932f1f7fe4c3facabb300..8409ccdd027baa5619ebdbe8a644ca1b4ad931cb 100644 (file)
@@ -1271,13 +1271,18 @@ struct erofs_inode *erofs_mkfs_build_tree_from_path(const char *path)
                if (S_ISDIR(inode->i_mode)) {
                        inode->next_dirwrite = dumpdir;
                        dumpdir = inode;
+               } else {
+                       erofs_iput(inode);
                }
        } while (!list_empty(&dirs));
 
-       for (; dumpdir; dumpdir = dumpdir->next_dirwrite) {
-               erofs_write_dir_file(dumpdir);
-               erofs_write_tail_end(dumpdir);
-               dumpdir->bh->op = &erofs_write_inode_bhops;
+       while (dumpdir) {
+               inode = dumpdir;
+               erofs_write_dir_file(inode);
+               erofs_write_tail_end(inode);
+               inode->bh->op = &erofs_write_inode_bhops;
+               dumpdir = inode->next_dirwrite;
+               erofs_iput(inode);
        }
        return root;
 }