From: NeilBrown Date: Tue, 28 May 2013 06:43:03 +0000 (+1000) Subject: super1: fix some casts of signed superblock fields. X-Git-Tag: mdadm-3.3-rc1~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6e4b44fdbd489e5e8ff1bbcaf17315131182ca3;p=thirdparty%2Fmdadm.git super1: fix some casts of signed superblock fields. 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 --- diff --git a/super1.c b/super1.c index b73d3ab9..b7fc8347 100644 --- 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;