]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
[COVERITY] Fix memory leak when parsing extended options in e2fsck
authorBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 28 Mar 2007 15:41:40 +0000 (11:41 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 28 Mar 2007 15:41:40 +0000 (11:41 -0400)
Coverity ID: 36: Resource Leak

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
e2fsck/ChangeLog
e2fsck/pass1.c

index 7dbd05a938be43fbd90102bcc5395cf4a3aa26f6..e3a1dff73f48ed444d034259367f73f6f0046b8f 100644 (file)
@@ -1,6 +1,7 @@
 2007-03-28  Theodore Tso  <tytso@mit.edu>
 
-       * unix.c (parse_extended_opts): Fix memory leak
+       * pass1.c (check_ext_attr), unix.c (parse_extended_opts): Fix
+               memory leak
 
 2007-03-21  Theodore Tso  <tytso@mit.edu>
 
index 57a6b5a26370f01e9131c399769bc8185df1d90a..6dcddc9a44b961ce768977e374704daf09b266c4 100644 (file)
@@ -1161,7 +1161,7 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
        struct ext2_ext_attr_entry *entry;
        int             count;
        region_t        region;
-       
+
        blk = inode->i_file_acl;
        if (blk == 0)
                return 0;
@@ -1227,7 +1227,7 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
                ea_refcount_increment(ctx->refcount_extra, blk, 0);
                return 1;
        }
-       
+
        /*
         * OK, we haven't seen this EA block yet.  So we need to
         * validate it
@@ -1261,7 +1261,7 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
                if (fix_problem(ctx, PR_1_EA_ALLOC_COLLISION, pctx))
                        goto clear_extattr;
        }
-       
+
        entry = (struct ext2_ext_attr_entry *)(header+1);
        end = block_buf + fs->blocksize;
        while ((char *)entry < end && *(__u32 *)entry) {
@@ -1300,10 +1300,11 @@ static int check_ext_attr(e2fsck_t ctx, struct problem_context *pctx,
                ea_refcount_store(ctx->refcount, blk, count);
        mark_block_used(ctx, blk);
        ext2fs_fast_mark_block_bitmap(ctx->block_ea_map, blk);
-       
        return 1;
 
 clear_extattr:
+       if (region)
+               region_free(region);
        inode->i_file_acl = 0;
        e2fsck_write_inode(ctx, ino, inode, "check_ext_attr");
        return 0;