Whamcloud - gitweb
libext2fs: fix memory leaks on error paths in ext2fs_create_icount_tdb
authorTheodore Ts'o <tytso@mit.edu>
Tue, 7 Jan 2014 14:05:03 +0000 (09:05 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 7 Jan 2014 14:49:10 +0000 (09:49 -0500)
Addresses-Coverity-Id: #1138575

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/ext2fs/icount.c

index c5ebf74..80085e1 100644 (file)
@@ -192,10 +192,12 @@ errcode_t ext2fs_create_icount_tdb(ext2_filsys fs, char *tdb_dir,
                goto errout;
        uuid_unparse(fs->super->s_uuid, uuid);
        sprintf(fn, "%s/%s-icount-XXXXXX", tdb_dir, uuid);
+       icount->tdb_fn = fn;
        fd = mkstemp(fn);
-       if (fd < 0)
-               return fd;
-
+       if (fd < 0) {
+               retval = errno;
+               goto errout;
+       }
        /*
         * This is an overestimate of the size that we will need; the
         * ideal value is the number of used inodes with a count
@@ -206,18 +208,15 @@ errcode_t ext2fs_create_icount_tdb(ext2_filsys fs, char *tdb_dir,
         */
        num_inodes = fs->super->s_inodes_count - fs->super->s_free_inodes_count;
 
-       icount->tdb_fn = fn;
        icount->tdb = tdb_open(fn, num_inodes, TDB_NOLOCK | TDB_NOSYNC,
                               O_RDWR | O_CREAT | O_TRUNC, 0600);
-       if (icount->tdb) {
-               close(fd);
-               *ret = icount;
-               return 0;
-       }
-
-       retval = errno;
        close(fd);
-
+       if (icount->tdb == NULL) {
+               retval = errno;
+               goto errout;
+       }
+       *ret = icount;
+       return 0;
 errout:
        ext2fs_free_icount(icount);
        return(retval);