]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
super1: fix some casts of signed superblock fields.
authorNeilBrown <neilb@suse.de>
Tue, 28 May 2013 06:43:03 +0000 (16:43 +1000)
committerNeilBrown <neilb@suse.de>
Tue, 28 May 2013 06:43:03 +0000 (16:43 +1000)
These need to be cast to uint32_t before being cast to 'long', else
sign extension doesn't happen on 64bit hosts.

And bitmap_offset is le32, not le64 !!

Signed-off-by: NeilBrown <neilb@suse.de>
super1.c

index b73d3ab95f9def22cf5ac6176ee8badeb5324945..b7fc83474bff909687c31d2419283c37e09b76df 100644 (file)
--- a/super1.c
+++ b/super1.c
@@ -404,7 +404,7 @@ static void examine_super1(struct supertype *st, char *homehost)
        if (sb->bblog_size && sb->bblog_offset) {
                printf("  Bad Block Log : %d entries available at offset %ld sectors",
                       __le16_to_cpu(sb->bblog_size)*512/8,
-                      (long)__le32_to_cpu(sb->bblog_offset));
+                      (long)(int32_t)__le32_to_cpu(sb->bblog_offset));
                if (sb->feature_map &
                    __cpu_to_le32(MD_FEATURE_BAD_BLOCKS))
                        printf(" - bad blocks present.");
@@ -1182,7 +1182,7 @@ static int update_super1(struct supertype *st, struct mdinfo *info,
                 */
                unsigned long long sb_offset = __le64_to_cpu(sb->super_offset);
                unsigned long long data_offset = __le64_to_cpu(sb->data_offset);
-               long bitmap_offset = (long)__le64_to_cpu(sb->bitmap_offset);
+               long bitmap_offset = (long)(int32_t)__le32_to_cpu(sb->bitmap_offset);
                long bm_sectors = 0;
                long space;