scsi: mpi3mr: Use number of bits to manage bitmap sizes
CVE-2023-53376
What is CVE-2023-53376?
In the Linux kernel, the following vulnerability has been resolved:
scsi: mpi3mr: Use number of bits to manage bitmap sizes
To allocate bitmaps, the mpi3mr driver calculates sizes of bitmaps using byte as unit. However, bitmap helper functions assume that bitmaps are allocated using unsigned long as unit. This gap causes memory access beyond the bitmap sizes and results in "BUG: KASAN: slab-out-of-bounds". The BUG was observed at firmware download to eHBA-9600. Call trace indicated that the out-of-bounds access happened in find_first_zero_bit() called from mpi3mr_send_event_ack() for miroc->evtack_cmds_bitmap.
To fix the BUG, do not use bytes to manage bitmap sizes. Instead, use number of bits, and call bitmap helper functions which take number of bits as arguments. For memory allocation, call bitmap_zalloc() instead of kzalloc() and krealloc(). For memory free, call bitmap_free() instead of kfree(). For zero clear, call bitmap_clear() instead of memset().
Remove three fields for bitmap byte sizes in struct scmd_priv which are no longer required. Replace the field dev_handle_bitmap_sz with dev_handle_bitmap_bits to keep number of bits of removepend_bitmap across resize.
Affected Version(s)
Linux 824a156633dfdb0e17979a0d0bb2c757d1bb949c < 6a675a6d57d31da43d8da576465c1cd5d5b0bd3d
Linux 824a156633dfdb0e17979a0d0bb2c757d1bb949c < 8ac713d2e9845e9234bb12ae5903040685d5aff9
Linux 824a156633dfdb0e17979a0d0bb2c757d1bb949c < 339e61565f81a6534afdc18fd854b2e2628bf5db