- for (i = levels - 1; i >= 0; i--) {
- hash_level_block[i] = hash_position;
- // verity position of block data_file_blocks at level i
- s = data_file_blocks >> (i * hash_per_block_bits);
- s = (s + hash_per_block - 1) / hash_per_block;
- hash_level_size[i] = s;
- if (hash_position + s < hash_position ||
- (hash_position + s) < 0 ||
- (hash_position + s) != hash_position + s) {
- log_err(cd, _("Device offset overflow.\n"));
- return -EINVAL;
- }
- hash_position += s;
- }
-
- if (mult_overflow(&hash_device_size, hash_position, hash_block_size)) {
- log_err(cd, _("Device offset overflow.\n"));
- return -EINVAL;
- }
-
- log_dbg("Data device size required: %" PRIu64 " bytes.",
- data_device_size);
- data_file = fopen(data_device, "r");