Commit 27d49ac1 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Mike Snitzer

dm zoned: check superblock location

When specifying several devices the superblock location must be
checked to ensure the devices are specified in the correct order.
Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
parent 2094045f
...@@ -997,7 +997,7 @@ static int dmz_check_sb(struct dmz_metadata *zmd, struct dmz_sb *dsb, ...@@ -997,7 +997,7 @@ static int dmz_check_sb(struct dmz_metadata *zmd, struct dmz_sb *dsb,
struct dmz_dev *dev = dsb->dev; struct dmz_dev *dev = dsb->dev;
unsigned int nr_meta_zones, nr_data_zones; unsigned int nr_meta_zones, nr_data_zones;
u32 crc, stored_crc; u32 crc, stored_crc;
u64 gen; u64 gen, sb_block;
if (le32_to_cpu(sb->magic) != DMZ_MAGIC) { if (le32_to_cpu(sb->magic) != DMZ_MAGIC) {
dmz_dev_err(dev, "Invalid meta magic (needed 0x%08x, got 0x%08x)", dmz_dev_err(dev, "Invalid meta magic (needed 0x%08x, got 0x%08x)",
...@@ -1026,6 +1026,14 @@ static int dmz_check_sb(struct dmz_metadata *zmd, struct dmz_sb *dsb, ...@@ -1026,6 +1026,14 @@ static int dmz_check_sb(struct dmz_metadata *zmd, struct dmz_sb *dsb,
return -ENXIO; return -ENXIO;
} }
sb_block = le64_to_cpu(sb->sb_block);
if (sb_block != (u64)dsb->zone->id << zmd->zone_nr_blocks_shift ) {
dmz_dev_err(dev, "Invalid superblock position "
"(is %llu expected %llu)",
sb_block,
(u64)dsb->zone->id << zmd->zone_nr_blocks_shift);
return -EINVAL;
}
if (zmd->sb_version > 1) { if (zmd->sb_version > 1) {
uuid_t sb_uuid; uuid_t sb_uuid;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment