• Shin'ichiro Kawasaki's avatar
    scsi: mpi3mr: Use number of bits to manage bitmap sizes · 339e6156
    Shin'ichiro Kawasaki authored
    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.
    
    Link: https://lore.kernel.org/r/20230214005019.1897251-4-shinichiro.kawasaki@wdc.com
    Fixes: c5758fc7 ("scsi: mpi3mr: Gracefully handle online FW update operation")
    Fixes: e844adb1 ("scsi: mpi3mr: Implement SCSI error handler hooks")
    Fixes: c1af985d ("scsi: mpi3mr: Add Event acknowledgment logic")
    Fixes: 824a1566
    
     ("scsi: mpi3mr: Base driver code")
    Signed-off-by: default avatarShin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
    Acked-by: default avatarSathya Prakash Veerichetty <sathya.prakash@broadcom.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    339e6156
mpi3mr_fw.c 170 KB