summaryrefslogtreecommitdiff
path: root/super1.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2013-05-28 16:43:03 +1000
committerNeilBrown <neilb@suse.de>2013-05-28 16:43:03 +1000
commitd6e4b44fdbd489e5e8ff1bbcaf17315131182ca3 (patch)
tree3494b944b07c27a82ebf274c888a27d18c422573 /super1.c
parent5e1863d49d4643135728803c5197af611787652e (diff)
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 <neilb@suse.de>
Diffstat (limited to 'super1.c')
-rw-r--r--super1.c4
1 files changed, 2 insertions, 2 deletions
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;