diff options
| author | Carl Hetherington <cth@carlh.net> | 2021-05-28 11:14:06 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-05-28 11:14:11 +0200 |
| commit | cce3730330bd5621a94ec813934ba4f41254910d (patch) | |
| tree | 3dc7b705fd47b53884f0c9dc98a6c735c01507d0 /src/ext4_mbr.c | |
| parent | 9d20ec504c40c79a63c3ffa14dc9152e0ba4ecae (diff) | |
Fix some overflows when making larger partitions (e.g. 2TB) (DoM bug #2021)
Diffstat (limited to 'src/ext4_mbr.c')
| -rw-r--r-- | src/ext4_mbr.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/ext4_mbr.c b/src/ext4_mbr.c index 63aeeda..9a366da 100644 --- a/src/ext4_mbr.c +++ b/src/ext4_mbr.c @@ -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;; |
