summaryrefslogtreecommitdiffstats
path: root/disk-utils
diff options
context:
space:
mode:
authorSami Kerola2017-05-15 12:54:43 +0200
committerKarel Zak2017-05-16 14:54:41 +0200
commit51b4b398707497daa048a859bac59925921b101d (patch)
tree59e92822a2b9845b07a2adacc7bce2ca732185f0 /disk-utils
parentdocs: update TODO, add mount(8) noauto,auto (diff)
downloadkernel-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.c8
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;