From: Andrey Vatoropin <a.vatoropin@xxxxxxx> The function ib_umem_find_best_pgsz may return a value of zero. If this occurs, the function ib_umem_num_dma_blocks could attempt to divide by zero, resulting in a division by zero error. To avoid this, please add a check to ensure that the variable is not zero before performing the division. Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: 6d1782919dc9 ("drm/cma: Introduce drm_gem_cma_dumb_create_internal()") Signed-off-by: Andrey Vatoropin <a.vatoropin@xxxxxxx> --- drivers/infiniband/hw/erdma/erdma_verbs.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/infiniband/hw/erdma/erdma_verbs.c b/drivers/infiniband/hw/erdma/erdma_verbs.c index 51d619edb6c5..7ad38fb84661 100644 --- a/drivers/infiniband/hw/erdma/erdma_verbs.c +++ b/drivers/infiniband/hw/erdma/erdma_verbs.c @@ -781,6 +781,10 @@ static int get_mtt_entries(struct erdma_dev *dev, struct erdma_mem *mem, mem->page_size = ib_umem_find_best_pgsz(mem->umem, req_page_size, virt); + if (!mem->page_size) { + ret = -EINVAL; + goto error_ret; + } mem->page_offset = start & (mem->page_size - 1); mem->mtt_nents = ib_umem_num_dma_blocks(mem->umem, mem->page_size); mem->page_cnt = mem->mtt_nents; mem->mtt = erdma_create_mtt(dev, MTT_SIZE(mem->page_cnt), force_continuous); -- 2.43.0