]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libblkid: (nilfs2) check devise size
authorKarel Zak <kzak@redhat.com>
Tue, 9 Jun 2015 08:37:11 +0000 (10:37 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 9 Jun 2015 08:37:11 +0000 (10:37 +0200)
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 <htd+ml@fritha.org>
Signed-off-by: Karel Zak <kzak@redhat.com>
libblkid/src/superblocks/nilfs.c

index eccd8ae1db94b414dd6b89d25e018943eb8ed8e4..14a4b74c63160b71948eab08e0f47fd135b8e52b 100644 (file)
@@ -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);