aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/nvme/host
diff options
context:
space:
mode:
authorMinwoo Im <minwoo.im.dev@gmail.com>2017-11-17 01:34:24 +0900
committerChristoph Hellwig <hch@lst.de>2017-11-20 08:38:09 +0100
commit244a8fe40a09c218622eb9927b9090b0a9b73a1a (patch)
tree424bb4b4200a3c7a4fd36d793d2cf729f8a9a844 /drivers/nvme/host
parentnvme-pci: disable APST on Samsung SSD 960 EVO + ASUS PRIME B350M-A (diff)
downloadlinux-dev-244a8fe40a09c218622eb9927b9090b0a9b73a1a.tar.xz
linux-dev-244a8fe40a09c218622eb9927b9090b0a9b73a1a.zip
nvme-pci: avoid hmb desc array idx out-of-bound when hmmaxd set.
hmb descriptor idx out-of-bound occurs in case of below conditions. preferred = 128MiB chunk_size = 4MiB hmmaxd = 1 Current code will not allow rmmod which will free hmb descriptors to be done successfully in above case. "descs[i]" will be set in for-loop without seeing any conditions related to "max_entries" after a single "descs" was allocated by (max_entries = 1) in this case. Added a condition into for-loop to check index of descriptors. Fixes: 044a9df1("nvme-pci: implement the HMB entry number and size limitations") Signed-off-by: Minwoo Im <minwoo.im.dev@gmail.com> Reviewed-by: Keith Busch <keith.busch@intel.com> Signed-off-by: Christoph Hellwig <hch@lst.de>
Diffstat (limited to 'drivers/nvme/host')
-rw-r--r--drivers/nvme/host/pci.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 8a15aa50b8e0..58dbe684007b 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -1787,7 +1787,7 @@ static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,
if (!bufs)
goto out_free_descs;
- for (size = 0; size < preferred; size += len) {
+ for (size = 0; size < preferred && i < max_entries; size += len) {
dma_addr_t dma_addr;
len = min_t(u64, chunk_size, preferred - size);