From: Theodore Ts'o Date: Sun, 24 Jun 2018 17:52:10 +0000 (-0400) Subject: e2fsck: add proper error checking in move_quota_inode X-Git-Tag: v1.44.3-rc1~14 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=ccbca2992070cd6489a89223744baf2c6de5d5a3;p=tools%2Fe2fsprogs.git e2fsck: add proper error checking in move_quota_inode Fixes-Coverity-Bug: 1369035 Signed-off-by: Theodore Ts'o --- diff --git a/e2fsck/quota.c b/e2fsck/quota.c index 3d48284..f9b68c9 100644 --- a/e2fsck/quota.c +++ b/e2fsck/quota.c @@ -16,22 +16,26 @@ #include "e2fsck.h" #include "problem.h" -static void move_quota_inode(ext2_filsys fs, ext2_ino_t from_ino, - ext2_ino_t to_ino, enum quota_type qtype) +static errcode_t move_quota_inode(ext2_filsys fs, ext2_ino_t from_ino, + ext2_ino_t to_ino, enum quota_type qtype) { struct ext2_inode inode; errcode_t retval; char qf_name[QUOTA_NAME_LEN]; /* We need the inode bitmap to be loaded */ - if (ext2fs_read_bitmaps(fs)) - return; + retval = ext2fs_read_bitmaps(fs); + if (retval) { + com_err("ext2fs_read_bitmaps", retval, "%s", + _("in move_quota_inode")); + return retval; + } retval = ext2fs_read_inode(fs, from_ino, &inode); if (retval) { com_err("ext2fs_read_inode", retval, "%s", _("in move_quota_inode")); - return; + return retval; } inode.i_links_count = 1; @@ -44,16 +48,22 @@ static void move_quota_inode(ext2_filsys fs, ext2_ino_t from_ino, if (retval) { com_err("ext2fs_write_new_inode", retval, "%s", _("in move_quota_inode")); - return; + return retval; } /* unlink the old inode */ quota_get_qf_name(qtype, QFMT_VFS_V1, qf_name); - ext2fs_unlink(fs, EXT2_ROOT_INO, qf_name, from_ino, 0); + retval = ext2fs_unlink(fs, EXT2_ROOT_INO, qf_name, from_ino, 0); + if (retval) { + com_err("ext2fs_unlink", retval, "%s", + _("in move_quota_inode")); + return retval; + } ext2fs_inode_alloc_stats(fs, from_ino, -1); /* Clear out the original inode in the inode-table block. */ memset(&inode, 0, sizeof(struct ext2_inode)); ext2fs_write_inode(fs, from_ino, &inode); + return 0; } void e2fsck_hide_quota(e2fsck_t ctx) @@ -77,7 +87,8 @@ void e2fsck_hide_quota(e2fsck_t ctx) quota_ino = quota_type2inum(qtype, fs->super); if (pctx.ino && (pctx.ino != quota_ino) && fix_problem(ctx, PR_0_HIDE_QUOTA, &pctx)) { - move_quota_inode(fs, pctx.ino, quota_ino, qtype); + if (move_quota_inode(fs, pctx.ino, quota_ino, qtype)) + continue; *quota_sb_inump(sb, qtype) = quota_ino; ext2fs_mark_super_dirty(fs); }