Skip to content

Commit c17fb54

Browse files
Hakon-BuggeYuKuai-huawei
authored andcommitted
md/md-bitmap: fix GPF in bitmap_get_stats()
The commit message of commit 6ec1f02 ("md/md-bitmap: fix stats collection for external bitmaps") states: Remove the external bitmap check as the statistics should be available regardless of bitmap storage location. Return -EINVAL only for invalid bitmap with no storage (neither in superblock nor in external file). But, the code does not adhere to the above, as it does only check for a valid super-block for "internal" bitmaps. Hence, we observe: Oops: GPF, probably for non-canonical address 0x1cd66f1f40000028 RIP: 0010:bitmap_get_stats+0x45/0xd0 Call Trace: seq_read_iter+0x2b9/0x46a seq_read+0x12f/0x180 proc_reg_read+0x57/0xb0 vfs_read+0xf6/0x380 ksys_read+0x6d/0xf0 do_syscall_64+0x8c/0x1b0 entry_SYSCALL_64_after_hwframe+0x76/0x7e We fix this by checking the existence of a super-block for both the internal and external case. Fixes: 6ec1f02 ("md/md-bitmap: fix stats collection for external bitmaps") Cc: [email protected] Reported-by: Gerald Gibson <[email protected]> Signed-off-by: Håkon Bugge <[email protected]> Link: https://lore.kernel.org/linux-raid/[email protected] Signed-off-by: Yu Kuai <[email protected]>
1 parent 5fa31c4 commit c17fb54

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

drivers/md/md-bitmap.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2366,8 +2366,7 @@ static int bitmap_get_stats(void *data, struct md_bitmap_stats *stats)
23662366

23672367
if (!bitmap)
23682368
return -ENOENT;
2369-
if (!bitmap->mddev->bitmap_info.external &&
2370-
!bitmap->storage.sb_page)
2369+
if (!bitmap->storage.sb_page)
23712370
return -EINVAL;
23722371
sb = kmap_local_page(bitmap->storage.sb_page);
23732372
stats->sync_size = le64_to_cpu(sb->sync_size);

0 commit comments

Comments
 (0)