]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
libxfs: fix memory leasks in libxfs_umount()
authorEric Sandeen <sandeen@sandeen.net>
Mon, 24 Aug 2015 01:52:42 +0000 (11:52 +1000)
committerDave Chinner <david@fromorbit.com>
Mon, 24 Aug 2015 01:52:42 +0000 (11:52 +1000)
libxfs_umount was failing to free a handful of resources; fix that
up.  Call it from xfs_copy as well, while we're at it; every other
libxfs_mount has a libxfs_umount counterpart, at least on a clean
exit.

[dchinner: fix superblock buffer leak uncovered by adding
 libxfs_umount() to xfs_copy. ]

Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
copy/xfs_copy.c
libxfs/init.c

index e13f468c35ced331b79a401af1ca17e5b77d50c8..2f4f5cbb34493b12b35bfa5ab810eabbbf405424 100644 (file)
@@ -696,6 +696,7 @@ main(int argc, char **argv)
        sbp = libxfs_readbuf(mbuf.m_ddev_targp, XFS_SB_DADDR,
                             1 << (sb->sb_sectlog - BBSHIFT),
                             0, &xfs_sb_buf_ops);
+       libxfs_putbuf(sbp);
 
        mp = libxfs_mount(&mbuf, sb, xargs.ddev, xargs.logdev, xargs.rtdev, 0);
        if (mp == NULL) {
@@ -1165,6 +1166,8 @@ main(int argc, char **argv)
        }
 
        check_errors();
+       libxfs_umount(mp);
+
        return 0;
 }
 
index 2859f94a95d7e2caf7fe79b0872633b7cbfa4283..c7f9dc8bd9e62af4eba63e9449b20f9f0d660d0b 100644 (file)
@@ -832,6 +832,15 @@ libxfs_umount(xfs_mount_t *mp)
                pag = radix_tree_delete(&mp->m_perag_tree, agno);
                kmem_free(pag);
        }
+
+       kmem_free(mp->m_attr_geo);
+       kmem_free(mp->m_dir_geo);
+
+       kmem_free(mp->m_rtdev_targp);
+       if (mp->m_logdev_targp != mp->m_ddev_targp)
+               kmem_free(mp->m_logdev_targp);
+       kmem_free(mp->m_ddev_targp);
+       
 }
 
 /*