diff options
author | Eli Cohen <eli@dev.mellanox.co.il> | 2013-10-23 02:53:15 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2013-11-08 17:42:59 -0500 |
commit | 9641b74ebee65320fa52172995d6df12b641caa5 (patch) | |
tree | 4fa500b2bad8980e5f5111cd1c82f2bb1150234f /drivers/infiniband/hw/mlx5 | |
parent | 746b5583c1a48a837f4891adaff5e09d61b204a6 (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.c | 4 |
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); |