|
@@ -831,9 +831,8 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
|
|
for (i = v->levels - 1; i >= 0; i--) {
|
|
|
sector_t s;
|
|
|
v->hash_level_block[i] = hash_position;
|
|
|
- s = verity_position_at_level(v, v->data_blocks, i);
|
|
|
- s = (s >> v->hash_per_block_bits) +
|
|
|
- !!(s & ((1 << v->hash_per_block_bits) - 1));
|
|
|
+ s = (v->data_blocks + ((sector_t)1 << ((i + 1) * v->hash_per_block_bits)) - 1)
|
|
|
+ >> ((i + 1) * v->hash_per_block_bits);
|
|
|
if (hash_position + s < hash_position) {
|
|
|
ti->error = "Hash device offset overflow";
|
|
|
r = -E2BIG;
|