aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/mlx5
diff options
context:
space:
mode:
authorEli Cohen <eli@dev.mellanox.co.il>2013-10-23 02:53:15 -0400
committerRoland Dreier <roland@purestorage.com>2013-11-08 17:42:59 -0500
commit9641b74ebee65320fa52172995d6df12b641caa5 (patch)
tree4fa500b2bad8980e5f5111cd1c82f2bb1150234f /drivers/infiniband/hw/mlx5
parent746b5583c1a48a837f4891adaff5e09d61b204a6 (diff)
IB/mlx5: Fix overflow check in IB_WR_FAST_REG_MR
Make sure not to overflow when reading the page list from struct ib_fast_reg_page_list. Signed-off-by: Eli Cohen <eli@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw/mlx5')
-rw-r--r--drivers/infiniband/hw/mlx5/qp.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/infiniband/hw/mlx5/qp.c b/drivers/infiniband/hw/mlx5/qp.c
index e3881433f5d7..8a36fd78c89f 100644
--- a/drivers/infiniband/hw/mlx5/qp.c
+++ b/drivers/infiniband/hw/mlx5/qp.c
@@ -1915,6 +1915,10 @@ static int set_frwr_li_wr(void **seg, struct ib_send_wr *wr, int *size,
1915 if (unlikely((*seg == qp->sq.qend))) 1915 if (unlikely((*seg == qp->sq.qend)))
1916 *seg = mlx5_get_send_wqe(qp, 0); 1916 *seg = mlx5_get_send_wqe(qp, 0);
1917 if (!li) { 1917 if (!li) {
1918 if (unlikely(wr->wr.fast_reg.page_list_len >
1919 wr->wr.fast_reg.page_list->max_page_list_len))
1920 return -ENOMEM;
1921
1918 set_frwr_pages(*seg, wr, mdev, pd, writ); 1922 set_frwr_pages(*seg, wr, mdev, pd, writ);
1919 *seg += sizeof(struct mlx5_wqe_data_seg); 1923 *seg += sizeof(struct mlx5_wqe_data_seg);
1920 *size += (sizeof(struct mlx5_wqe_data_seg) / 16); 1924 *size += (sizeof(struct mlx5_wqe_data_seg) / 16);