diff options
author | Sami Kerola | 2017-05-15 12:54:43 +0200 |
---|---|---|
committer | Karel Zak | 2017-05-16 14:54:41 +0200 |
commit | 51b4b398707497daa048a859bac59925921b101d (patch) | |
tree | 59e92822a2b9845b07a2adacc7bce2ca732185f0 /disk-utils | |
parent | docs: update TODO, add mount(8) noauto,auto (diff) | |
download | kernel-qcow2-util-linux-51b4b398707497daa048a859bac59925921b101d.tar.gz kernel-qcow2-util-linux-51b4b398707497daa048a859bac59925921b101d.tar.xz kernel-qcow2-util-linux-51b4b398707497daa048a859bac59925921b101d.zip |
fsck.minix: fix crash
disk-utils/fsck.minix.c:421:30: runtime error: index 513 out of bounds for
type 'unsigned short [512]'
Addresses: https://github.com/karelzak/util-linux/issues/373
Reported-by: Hanno Bock <hanno@gentoo.org>
Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'disk-utils')
-rw-r--r-- | disk-utils/fsck.minix.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/disk-utils/fsck.minix.c b/disk-utils/fsck.minix.c index 34fbfdf72..1b4d9b461 100644 --- a/disk-utils/fsck.minix.c +++ b/disk-utils/fsck.minix.c @@ -401,6 +401,7 @@ map_block(struct minix_inode *inode, unsigned int blknr) { unsigned short ind[MINIX_BLOCK_SIZE >> 1]; unsigned short dind[MINIX_BLOCK_SIZE >> 1]; int blk_chg, block, result; + size_t range; if (blknr < 7) return check_zone_nr(inode->i_zone + blknr, &changed); @@ -418,7 +419,12 @@ map_block(struct minix_inode *inode, unsigned int blknr) { block = check_zone_nr(inode->i_zone + 8, &changed); read_block(block, (char *)dind); blk_chg = 0; - result = check_zone_nr(dind + (blknr / 512), &blk_chg); + range = blknr / 512; + if (ARRAY_SIZE(dind) <= range) { + printf(_("Warning: block out of range\n")); + return 1; + } + result = check_zone_nr(dind + range, &blk_chg); if (blk_chg) write_block(block, (char *)dind); block = result; |