forked from Minki/linux
nvme: fix handling of large MDTS values
Instead of triggering an integer overflow and undefined behavior if MDTS is large, set max_hw_sectors to UINT_MAX. Signed-off-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: Keith Busch <kbusch@kernel.org> [hch: rebased to account for the new nvme_mps_to_sectors helper] Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
5befc7c26e
commit
8609c63fce
@ -3049,9 +3049,11 @@ out:
|
||||
|
||||
static inline u32 nvme_mps_to_sectors(struct nvme_ctrl *ctrl, u32 units)
|
||||
{
|
||||
u32 page_shift = NVME_CAP_MPSMIN(ctrl->cap) + 12;
|
||||
u32 page_shift = NVME_CAP_MPSMIN(ctrl->cap) + 12, val;
|
||||
|
||||
return 1 << (units + page_shift - 9);
|
||||
if (check_shl_overflow(1U, units + page_shift - 9, &val))
|
||||
return UINT_MAX;
|
||||
return val;
|
||||
}
|
||||
|
||||
static int nvme_init_non_mdts_limits(struct nvme_ctrl *ctrl)
|
||||
|
Loading…
Reference in New Issue
Block a user