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: stable@vger.kernel.org Reported-by: Gerald Gibson <gerald.gibson@oracle.com> Signed-off-by: Håkon Bugge <haakon.bugge@oracle.com> Link: https://lore.kernel.org/linux-raid/20250702091035.2061312-1-haakon.bugge@oracle.com Signed-off-by: Yu Kuai <yukuai3@huawei.com>
1 parent 5fa31c4 commit c17fb54

1 file changed

Lines changed: 1 addition & 2 deletions

File tree

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)