mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-29 22:02:02 +00:00
dm integrity: correctly calculate the size of metadata area
commit30bba430dd
upstream. When we use separate devices for data and metadata, dm-integrity would incorrectly calculate the size of the metadata device as if it had 512-byte block size - and it would refuse activation with larger block size and smaller metadata device. Fix this so that it takes actual block size into account, which fixes the following reported issue: https://gitlab.com/cryptsetup/cryptsetup/issues/450 Fixes:356d9d52e1
("dm integrity: allow separate metadata device") Cc: stable@vger.kernel.org # v4.19+ Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3b92ff729c
commit
9407680a7b
1 changed files with 2 additions and 2 deletions
|
@ -2557,7 +2557,7 @@ static int calculate_device_limits(struct dm_integrity_c *ic)
|
|||
if (last_sector < ic->start || last_sector >= ic->meta_device_sectors)
|
||||
return -EINVAL;
|
||||
} else {
|
||||
__u64 meta_size = ic->provided_data_sectors * ic->tag_size;
|
||||
__u64 meta_size = (ic->provided_data_sectors >> ic->sb->log2_sectors_per_block) * ic->tag_size;
|
||||
meta_size = (meta_size + ((1U << (ic->log2_buffer_sectors + SECTOR_SHIFT)) - 1))
|
||||
>> (ic->log2_buffer_sectors + SECTOR_SHIFT);
|
||||
meta_size <<= ic->log2_buffer_sectors;
|
||||
|
@ -3428,7 +3428,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
|||
DEBUG_print(" journal_sections %u\n", (unsigned)le32_to_cpu(ic->sb->journal_sections));
|
||||
DEBUG_print(" journal_entries %u\n", ic->journal_entries);
|
||||
DEBUG_print(" log2_interleave_sectors %d\n", ic->sb->log2_interleave_sectors);
|
||||
DEBUG_print(" device_sectors 0x%llx\n", (unsigned long long)ic->device_sectors);
|
||||
DEBUG_print(" data_device_sectors 0x%llx\n", (unsigned long long)ic->data_device_sectors);
|
||||
DEBUG_print(" initial_sectors 0x%x\n", ic->initial_sectors);
|
||||
DEBUG_print(" metadata_run 0x%x\n", ic->metadata_run);
|
||||
DEBUG_print(" log2_metadata_run %d\n", ic->log2_metadata_run);
|
||||
|
|
Loading…
Reference in a new issue