]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: befs validate di_br_size !=0 and br_per_di_br != 0
authorTimo Warns <Warns@Pre-Sense.DE>
Tue, 9 Aug 2011 07:40:47 +0000 (09:40 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 15 Aug 2011 12:27:28 +0000 (14:27 +0200)
Validate that di_br_size !=0 and br_per_di_br != 0. If one of them is 0, a
division-by-zero error will be triggered.

Signed-off-by: Timo Warns <warns@pre-sense.de>
libblkid/src/superblocks/befs.c

index 62414ec61f677a318a638deeaade416eda49ab00..930429a58d2a15e151e8ae9c87031a7f5159fb34 100644 (file)
@@ -200,9 +200,16 @@ unsigned char *get_tree_node(blkid_probe pr, const struct befs_super_block *bs,
                int64_t di_br_size, br_per_di_br, di_index, i_index;
 
                start -= (int64_t) FS64_TO_CPU(ds->max_indirect_range, fs_le);
+
                di_br_size = (int64_t) FS16_TO_CPU(ds->double_indirect.len,
                                fs_le) << FS32_TO_CPU(bs->block_shift, fs_le);
+               if (di_br_size == 0)
+                       return NULL;
+
                br_per_di_br = di_br_size / sizeof(struct block_run);
+               if (br_per_di_br == 0)
+                       return NULL;
+
                di_index = start / (br_per_di_br * di_br_size);
                i_index = (start % (br_per_di_br * di_br_size)) / di_br_size;
                start = (start % (br_per_di_br * di_br_size)) % di_br_size;