lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20140501231236.31890.46904.stgit@birch.djwong.org> Date: Thu, 01 May 2014 16:12:36 -0700 From: "Darrick J. Wong" <darrick.wong@...cle.com> To: tytso@....edu, darrick.wong@...cle.com Cc: linux-ext4@...r.kernel.org Subject: [PATCH 02/37] misc: coverity fixes Fix various small resource leaks and error code handling issues that Coverity pointed out. Fixes-Coverity-Bugs: 11919{39-45}, 1174118, 1049160, 1049144 Signed-off-by: Darrick J. Wong <darrick.wong@...cle.com> --- debugfs/xattrs.c | 38 ++++++++++++++++++++------------------ lib/ext2fs/extent.c | 7 ++++--- lib/ext2fs/punch.c | 2 +- misc/create_inode.c | 34 ++++++++++++++++++++-------------- 4 files changed, 45 insertions(+), 36 deletions(-) diff --git a/debugfs/xattrs.c b/debugfs/xattrs.c index 0a29521..7109719 100644 --- a/debugfs/xattrs.c +++ b/debugfs/xattrs.c @@ -122,26 +122,26 @@ void do_get_xattr(int argc, char **argv) default: printf("%s: Usage: %s <file> <attr> [-f outfile]\n", argv[0], argv[0]); - return; + goto out2; } } if (optind != argc - 2) { printf("%s: Usage: %s <file> <attr> [-f outfile]\n", argv[0], argv[0]); - return; + goto out2; } if (check_fs_open(argv[0])) - return; + goto out2; ino = string_to_inode(argv[optind]); if (!ino) - return; + goto out2; err = ext2fs_xattrs_open(current_fs, ino, &h); if (err) - return; + goto out2; err = ext2fs_xattrs_read(h); if (err) @@ -153,18 +153,19 @@ void do_get_xattr(int argc, char **argv) if (fp) { fwrite(buf, buflen, 1, fp); - fclose(fp); } else { dump_xattr_string(stdout, buf, buflen); printf("\n"); } - if (buf) - ext2fs_free_mem(&buf); + ext2fs_free_mem(&buf); out: ext2fs_xattrs_close(&h); if (err) com_err(argv[0], err, "while getting extended attribute"); +out2: + if (fp) + fclose(fp); } void do_set_xattr(int argc, char **argv) @@ -190,30 +191,30 @@ void do_set_xattr(int argc, char **argv) default: printf("%s: Usage: %s <file> <attr> [-f infile | " "value]\n", argv[0], argv[0]); - return; + goto out2; } } if (optind != argc - 2 && optind != argc - 3) { printf("%s: Usage: %s <file> <attr> [-f infile | value>]\n", argv[0], argv[0]); - return; + goto out2; } if (check_fs_open(argv[0])) - return; + goto out2; if (check_fs_read_write(argv[0])) - return; + goto out2; if (check_fs_bitmaps(argv[0])) - return; + goto out2; ino = string_to_inode(argv[optind]); if (!ino) - return; + goto out2; err = ext2fs_xattrs_open(current_fs, ino, &h); if (err) - return; + goto out2; err = ext2fs_xattrs_read(h); if (err) @@ -238,13 +239,14 @@ void do_set_xattr(int argc, char **argv) goto out; out: + ext2fs_xattrs_close(&h); + if (err) + com_err(argv[0], err, "while setting extended attribute"); +out2: if (fp) { fclose(fp); ext2fs_free_mem(&buf); } - ext2fs_xattrs_close(&h); - if (err) - com_err(argv[0], err, "while setting extended attribute"); } void do_rm_xattr(int argc, char **argv) diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c index 80ce88f..30673b5 100644 --- a/lib/ext2fs/extent.c +++ b/lib/ext2fs/extent.c @@ -1482,7 +1482,7 @@ errcode_t ext2fs_extent_set_bmap(ext2_extent_handle_t handle, if (retval) { r2 = ext2fs_extent_goto(handle, orig_lblk); if (r2 == 0) - ext2fs_extent_replace(handle, 0, + (void)ext2fs_extent_replace(handle, 0, &orig_extent); goto done; } @@ -1498,11 +1498,12 @@ errcode_t ext2fs_extent_set_bmap(ext2_extent_handle_t handle, r2 = ext2fs_extent_goto(handle, newextent.e_lblk); if (r2 == 0) - ext2fs_extent_delete(handle, 0); + (void)ext2fs_extent_delete(handle, 0); } r2 = ext2fs_extent_goto(handle, orig_lblk); if (r2 == 0) - ext2fs_extent_replace(handle, 0, &orig_extent); + (void)ext2fs_extent_replace(handle, 0, + &orig_extent); goto done; } } diff --git a/lib/ext2fs/punch.c b/lib/ext2fs/punch.c index 60cd2a3..c9250cd 100644 --- a/lib/ext2fs/punch.c +++ b/lib/ext2fs/punch.c @@ -403,7 +403,7 @@ static errcode_t ext2fs_punch_extent(ext2_filsys fs, ext2_ino_t ino, retval = 0; /* Jump forward to the next extent. */ - ext2fs_extent_goto(handle, next_lblk); + (void)ext2fs_extent_goto(handle, next_lblk); op = EXT2_EXTENT_CURRENT; } if (retval) diff --git a/misc/create_inode.c b/misc/create_inode.c index 964c66a..4bb5e5b 100644 --- a/misc/create_inode.c +++ b/misc/create_inode.c @@ -465,7 +465,7 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, char ln_target[PATH_MAX]; unsigned int save_inode; ext2_ino_t ino; - errcode_t retval; + errcode_t retval = 0; int read_cnt; int hdlink; @@ -486,7 +486,11 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, if ((!strcmp(dent->d_name, ".")) || (!strcmp(dent->d_name, ".."))) continue; - lstat(dent->d_name, &st); + if (lstat(dent->d_name, &st)) { + com_err(__func__, errno, _("while lstat \"%s\""), + dent->d_name); + goto out; + } name = dent->d_name; /* Check for hardlinks */ @@ -501,7 +505,7 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, if (retval) { com_err(__func__, retval, "while linking %s", name); - return retval; + goto out; } continue; } else @@ -517,7 +521,7 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, com_err(__func__, retval, _("while creating special file " "\"%s\""), name); - return retval; + goto out; } break; case S_IFSOCK: @@ -527,7 +531,7 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, continue; case S_IFLNK: read_cnt = readlink(name, ln_target, - sizeof(ln_target)); + sizeof(ln_target) - 1); if (read_cnt == -1) { com_err(__func__, errno, _("while trying to readlink \"%s\""), @@ -541,7 +545,7 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, com_err(__func__, retval, _("while writing symlink\"%s\""), name); - return retval; + goto out; } break; case S_IFREG: @@ -550,7 +554,7 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, if (retval) { com_err(__func__, retval, _("while writing file \"%s\""), name); - return retval; + goto out; } break; case S_IFDIR: @@ -559,25 +563,25 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, if (retval) { com_err(__func__, retval, _("while making dir \"%s\""), name); - return retval; + goto out; } retval = ext2fs_namei(fs, root, parent_ino, name, &ino); if (retval) { com_err(name, retval, 0); - return retval; + goto out; } /* Populate the dir recursively*/ retval = __populate_fs(fs, ino, name, root, hdlinks); if (retval) { com_err(__func__, retval, _("while adding dir \"%s\""), name); - return retval; + goto out; } if (chdir("..")) { com_err(__func__, errno, _("during cd ..")); - return errno; + goto out; } break; default: @@ -588,14 +592,14 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, retval = ext2fs_namei(fs, root, parent_ino, name, &ino); if (retval) { com_err(name, retval, 0); - return retval; + goto out; } retval = set_inode_extra(fs, parent_ino, ino, &st); if (retval) { com_err(__func__, retval, _("while setting inode for \"%s\""), name); - return retval; + goto out; } /* Save the hardlink ino */ @@ -612,7 +616,7 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, if (p == NULL) { com_err(name, errno, _("Not enough memory")); - return errno; + goto out; } hdlinks->hdl = p; hdlinks->size += HDLINK_CNT; @@ -623,6 +627,8 @@ static errcode_t __populate_fs(ext2_filsys fs, ext2_ino_t parent_ino, hdlinks->count++; } } + +out: closedir(dh); return retval; } -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists