From: Karel Zak Date: Tue, 9 Jun 2015 08:37:11 +0000 (+0200) Subject: libblkid: (nilfs2) check devise size X-Git-Tag: v2.27-rc1~156 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00817742ce360119e079a33e12cf84118ff7c63e;p=thirdparty%2Futil-linux.git libblkid: (nilfs2) check devise size Unfortunately, nilfs2 have the same problem like many RAIDs. It uses the end of the device to store (backup) superblock. The end of the last partition is the same location as the end of the whole-disk. It means that the superblock seems valid for the last partitions as well as for whole-device. Fortunately, nilfs2 superblock contains size of the device, so we can distinguish between whole-disk and partition device. Reported-by: Heinz Diehl Signed-off-by: Karel Zak --- diff --git a/libblkid/src/superblocks/nilfs.c b/libblkid/src/superblocks/nilfs.c index eccd8ae1db..14a4b74c63 100644 --- a/libblkid/src/superblocks/nilfs.c +++ b/libblkid/src/superblocks/nilfs.c @@ -77,6 +77,9 @@ static int nilfs_valid_sb(blkid_probe pr, struct nilfs_super_block *sb) if (!sb || le16_to_cpu(sb->s_magic) != NILFS_SB_MAGIC) return 0; + if (sb->s_dev_size != pr->size) + return 0; + bytes = le16_to_cpu(sb->s_bytes); crc = crc32(le32_to_cpu(sb->s_crc_seed), (unsigned char *)sb, sumoff); crc = crc32(crc, sum, 4);