From: Theodore Ts'o Date: Thu, 22 Jan 2009 21:01:38 +0000 (-0500) Subject: libext2fs: Add sanity checks to ext2fs_{block,inode}_alloc_stats X-Git-Tag: v1.41.4~4 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=cf4e06d665e53ec7a5af67c9104e7278777a8488;p=tools%2Fe2fsprogs.git libext2fs: Add sanity checks to ext2fs_{block,inode}_alloc_stats If ext2fs_inode_alloc_stats2() or ext2fs_block_alloc_stats() is passed an insanely large inode or block number, it's possible for these functions to overrun an array boundary and cause the calling program to crash with a memory error. Detect this case, and since these functions don't return an error code, print a warning message, much like we do in ext2fs_warn_bitmap2(). Signed-off-by: "Theodore Ts'o" --- diff --git a/lib/ext2fs/alloc_stats.c b/lib/ext2fs/alloc_stats.c index 97661dc..d523b43 100644 --- a/lib/ext2fs/alloc_stats.c +++ b/lib/ext2fs/alloc_stats.c @@ -20,6 +20,13 @@ void ext2fs_inode_alloc_stats2(ext2_filsys fs, ext2_ino_t ino, { int group = ext2fs_group_of_ino(fs, ino); +#ifndef OMIT_COM_ERR + if (ino > fs->super->s_inodes_count) { + com_err("ext2fs_inode_alloc_stats2", 0, + "Illegal inode number: %lu", ino); + return; + } +#endif if (inuse > 0) ext2fs_mark_inode_bitmap(fs->inode_map, ino); else @@ -58,6 +65,13 @@ void ext2fs_block_alloc_stats(ext2_filsys fs, blk_t blk, int inuse) { int group = ext2fs_group_of_blk(fs, blk); +#ifndef OMIT_COM_ERR + if (blk >= fs->super->s_blocks_count) { + com_err("ext2fs_block_alloc_stats2", 0, + "Illegal block number: %lu", blk); + return; + } +#endif if (inuse > 0) ext2fs_mark_block_bitmap(fs->block_map, blk); else