]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
super1: only set clustered flag when bitmap is present
authorNeilBrown <neilb@suse.com>
Fri, 4 Aug 2017 05:30:02 +0000 (15:30 +1000)
committerJes Sorensen <jsorensen@fb.com>
Wed, 16 Aug 2017 12:25:07 +0000 (08:25 -0400)
If no bitmap is present, then the test

if (__le32_to_cpu(bsb->nodes) > 1)

accesses uninitialised memory.  So move that test inside
a test for a bitmap being present.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
super1.c

index b15a1c7a7854b313673bb09f60c72ad0a626012a..f6a104502919fa174f9fe698d61f8857381b0c99 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -977,14 +977,14 @@ static void getinfo_super1(struct supertype *st, struct mdinfo *info, char *map)
        info->array.chunk_size = __le32_to_cpu(sb->chunksize)*512;
        info->array.state =
                (__le64_to_cpu(sb->resync_offset) == MaxSector) ? 1 : 0;
-       if (__le32_to_cpu(bsb->nodes) > 1)
-               info->array.state |= (1 << MD_SB_CLUSTERED);
 
        super_offset = __le64_to_cpu(sb->super_offset);
        info->data_offset = __le64_to_cpu(sb->data_offset);
        info->component_size = __le64_to_cpu(sb->size);
        if (sb->feature_map & __le32_to_cpu(MD_FEATURE_BITMAP_OFFSET)) {
                info->bitmap_offset = (int32_t)__le32_to_cpu(sb->bitmap_offset);
+               if (__le32_to_cpu(bsb->nodes) > 1)
+                       info->array.state |= (1 << MD_SB_CLUSTERED);
        } else if (sb->feature_map & __le32_to_cpu(MD_FEATURE_PPL)) {
                info->ppl_offset = __le16_to_cpu(sb->ppl.offset);
                info->ppl_size = __le16_to_cpu(sb->ppl.size);