dm-integrity: use version 2 for separate metadata
Mikulas Patocka
maintainerPATCH 7/9 dm-integrity: use version 2 for separate metadata
Use version "2" in the superblock when data and metadata devices are separate, so that the device is no accidentally read by older kernel version.
Signed-off-by Mikulas Patocka <[email protected]>
--- drivers/md/dm-integrity.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-)
drivers/md/dm-integrity.c +13 -3
@@ -44,7 +44,8 @@*/ #define SB_MAGIC "integrt" -#define SB_VERSION 1 +#define SB_VERSION_1 1 +#define SB_VERSION_2 2#define SB_SECTORS 8#define MAX_SECTORS_PER_BLOCK 8
@@ -414,6 +415,14 @@ static void wraparound_section(struct dm *sec_ptr -= ic->journal_sections; } +static void sb_set_version (struct dm_integrity_c *ic) +{ +if (ic->meta_dev) + ic->sb->version =SB_VERSION_2 ; +else + ic->sb->version =SB_VERSION_1 ; +} +static int sync_rw_sb (struct dm_integrity_c *ic,int op,int op_flags) {struct dm_io_request io_req;
@@ -2431,7 +2440,6 @@ static int initialize_superblock(structmemset (ic->sb,0 ,SB_SECTORS <<SECTOR_SHIFT );memcpy (ic->sb->magic,SB_MAGIC ,8 ); - ic->sb->version =SB_VERSION ; ic->sb->integrity_tag_size =cpu_to_le16 (ic->tag_size); ic->sb->log2_sectors_per_block =__ffs (ic->sectors_per_block);if (ic->journal_mac_alg.alg_string)
@@ -2488,6 +2496,8 @@ try_smaller_buffer: ic->sb->provided_data_sectors =cpu_to_le64 (ic->provided_data_sectors); +sb_set_version (ic); +return 0 ; }
@@ -3185,7 +3195,7 @@ static int dm_integrity_ctr(struct dm_ta should_write_sb = true; } -if (ic->sb->version !=SB_VERSION ) { +if (!ic->sb->version || ic->sb->version >SB_VERSION_2 ) { r = -EINVAL ; ti->error ="Unknown version" ; goto bad;