aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Cohen <eli@dev.mellanox.co.il>2014-09-14 09:47:53 -0400
committerRoland Dreier <roland@purestorage.com>2014-10-09 03:08:40 -0400
commit1c3ce90d0acb0c661910dd84f416b3053e9710af (patch)
treef9023638d399fa1f01e52c7d68f537ff50c8bcac
parent377b513485fd885dea1083a9a5430df65b35e048 (diff)
IB/mlx5: Fix possible array overflow
The check to verify that userspace does not provide an invalid index to the micro UAR was placed too late. Fix this by moving the check before using the index. Reported by: Shachar Raindel <raindel@mellanox.com> Signed-off-by: Eli Cohen <eli@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
-rw-r--r--drivers/infiniband/hw/mlx5/main.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index ecd3aebc46fe..a24431746377 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -650,13 +650,13 @@ static int mlx5_ib_mmap(struct ib_ucontext *ibcontext, struct vm_area_struct *vm
650 return -EINVAL; 650 return -EINVAL;
651 651
652 idx = get_index(vma->vm_pgoff); 652 idx = get_index(vma->vm_pgoff);
653 if (idx >= uuari->num_uars)
654 return -EINVAL;
655
653 pfn = uar_index2pfn(dev, uuari->uars[idx].index); 656 pfn = uar_index2pfn(dev, uuari->uars[idx].index);
654 mlx5_ib_dbg(dev, "uar idx 0x%lx, pfn 0x%llx\n", idx, 657 mlx5_ib_dbg(dev, "uar idx 0x%lx, pfn 0x%llx\n", idx,
655 (unsigned long long)pfn); 658 (unsigned long long)pfn);
656 659
657 if (idx >= uuari->num_uars)
658 return -EINVAL;
659
660 vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); 660 vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
661 if (io_remap_pfn_range(vma, vma->vm_start, pfn, 661 if (io_remap_pfn_range(vma, vma->vm_start, pfn,
662 PAGE_SIZE, vma->vm_page_prot)) 662 PAGE_SIZE, vma->vm_page_prot))