diff options
author | Eli Cohen <eli@dev.mellanox.co.il> | 2013-10-23 08:53:15 +0200 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2013-11-08 23:42:59 +0100 |
commit | 9641b74ebee65320fa52172995d6df12b641caa5 (patch) | |
tree | 4fa500b2bad8980e5f5111cd1c82f2bb1150234f /drivers/infiniband/hw | |
parent | IB/mlx5: Multithreaded create MR (diff) | |
download | linux-9641b74ebee65320fa52172995d6df12b641caa5.tar.xz linux-9641b74ebee65320fa52172995d6df12b641caa5.zip |
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')
-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, if (unlikely((*seg == qp->sq.qend))) *seg = mlx5_get_send_wqe(qp, 0); if (!li) { + if (unlikely(wr->wr.fast_reg.page_list_len > + wr->wr.fast_reg.page_list->max_page_list_len)) + return -ENOMEM; + set_frwr_pages(*seg, wr, mdev, pd, writ); *seg += sizeof(struct mlx5_wqe_data_seg); *size += (sizeof(struct mlx5_wqe_data_seg) / 16); |