aboutsummaryrefslogtreecommitdiff
path: root/drivers/nvme
diff options
context:
space:
mode:
authorGravatar Keith Busch <kbusch@kernel.org> 2023-11-28 09:36:04 -0800
committerGravatar Keith Busch <kbusch@kernel.org> 2023-12-01 07:49:50 -0800
commit74fbc88e161424b3b96a22b23a8e3e1edab9d05c (patch)
treeedecdcc0d0f7ba754c1a679b327f0046ffcc01db /drivers/nvme
parentnvme: check for valid nvme_identify_ns() before using it (diff)
downloadlinux-74fbc88e161424b3b96a22b23a8e3e1edab9d05c.tar.gz
linux-74fbc88e161424b3b96a22b23a8e3e1edab9d05c.tar.bz2
linux-74fbc88e161424b3b96a22b23a8e3e1edab9d05c.zip
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: Jens Axboe <axboe@kernel.dk> Signed-off-by: Keith Busch <kbusch@kernel.org>
Diffstat (limited to 'drivers/nvme')
-rw-r--r--drivers/nvme/host/core.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index a55c2a774b9c..1be1ce522896 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -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
- * 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;
bs = (1 << 9);
}