scsi: ufs: core: scsi_get_lba() error fix
authorPeter Wang <peter.wang@mediatek.com>
Mon, 7 Mar 2022 11:17:52 +0000 (19:17 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 27 Apr 2022 12:38:51 +0000 (14:38 +0200)
commit8dfec6e0a62d31523195355d73e6fe96f5f2f16e
treef2669e49eecee7c7b58905d00a7ddb76148b2548
parentc2d0cdf8ad06ec1d1687729e5c5ccdd7746343e8
scsi: ufs: core: scsi_get_lba() error fix

commit 2bd3b6b75946db2ace06e145d53988e10ed7e99a upstream.

When ufs initializes without scmd->device->sector_size set, scsi_get_lba()
will get a wrong shift number and trigger an ubsan error.  The shift
exponent 4294967286 is too large for the 64-bit type 'sector_t' (aka
'unsigned long long').

Call scsi_get_lba() only when opcode is READ_10/WRITE_10/UNMAP.

Link: https://lore.kernel.org/r/20220307111752.10465-1-peter.wang@mediatek.com
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Peter Wang <peter.wang@mediatek.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/scsi/ufs/ufshcd.c