Commit 74fbc88e authored by Keith Busch's avatar Keith Busch

nvme-core: check for too small lba shift

The block layer doesn't support logical block sizes smaller than 512
bytes. The nvme spec doesn't support that small either, but the driver
isn't checking to make sure the device responded with usable data.
Failing to catch this will result in a kernel bug, either from a
division by zero when stacking, or a zero length bio.
Reviewed-by: default avatarJens Axboe <axboe@kernel.dk>
Signed-off-by: default avatarKeith Busch <kbusch@kernel.org>
parent d8b90d60
...@@ -1901,9 +1901,10 @@ static void nvme_update_disk_info(struct gendisk *disk, ...@@ -1901,9 +1901,10 @@ static void nvme_update_disk_info(struct gendisk *disk,
/* /*
* The block layer can't support LBA sizes larger than the page size * The block layer can't support LBA sizes larger than the page size
* yet, so catch this early and don't allow block I/O. * or smaller than a sector size yet, so catch this early and don't
* allow block I/O.
*/ */
if (ns->lba_shift > PAGE_SHIFT) { if (ns->lba_shift > PAGE_SHIFT || ns->lba_shift < SECTOR_SHIFT) {
capacity = 0; capacity = 0;
bs = (1 << 9); bs = (1 << 9);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment