Fix some overflows when making larger partitions (e.g. 2TB) (DoM bug #2021)
authorCarl Hetherington <cth@carlh.net>
Fri, 28 May 2021 09:14:06 +0000 (11:14 +0200)
committerCarl Hetherington <cth@carlh.net>
Fri, 28 May 2021 09:14:11 +0000 (11:14 +0200)
src/ext4_mbr.c

index 63aeeda4cd85eec1633836c03897943f3e80cecf..9a366dab0d5a7363f6116704423bb8e0141ffa58 100644 (file)
@@ -162,21 +162,21 @@ int ext4_mbr_write(struct ext4_blockdev *parent, struct ext4_mbr_parts *parts, u
 
        mbr->disk_id = disk_id;
 
-       uint32_t cyl_it = 0;
+       uint64_t cyl_it = 0;
        for (int i = 0; i < 4; ++i) {
-               uint32_t cyl_part = cyl_count * parts->division[i] / 100;
+               uint64_t cyl_part = ((uint64_t) cyl_count) * parts->division[i] / 100;
                if (!cyl_part)
                        continue;
 
-               uint64_t part_start = ((uint64_t) cyl_it) * cyl_size;
-               uint64_t part_size = ((uint64_t) cyl_part) * cyl_size;
+               uint64_t part_start = cyl_it * cyl_size;
+               uint64_t part_size = cyl_part * cyl_size;
 
                if (i == 0) {
                        part_start += 63;
                        part_size -= 63 * parent->bdif->ph_bsize;
                }
 
-               uint32_t cyl_end = cyl_part + cyl_it - 1;
+               uint64_t cyl_end = cyl_part + cyl_it - 1;
 
                mbr->part_entry[i].status = 0;
                mbr->part_entry[i].chs1[0] = i ? 0 : 1;;