FAILED: patch "[PATCH] IB/mlx5: Fix out-of-bound access" failed to apply to 4.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
0fd27a88c2e4f548937fd7d93fc6e65c4ad7c278Mon Sep 17 00:00:00 2001
From: Leon Romanovsky <[email protected]>
Date: Wed, 18 Jan 2017 14:10:30 +0200
Subject: [PATCH] IB/mlx5: Fix out-of-bound access
When we initialize buffer to create SRQ in kernel, the number of pages was less than actually used in following mlx5_fill_page_array().
Fixes e126ba97dba9 ("mlx5: Add driver for Mellanox Connect-IB adapters")
Cc <[email protected]> # v3.10+
Signed-off-by Leon Romanovsky <[email protected]>
Reviewed-by Eli Cohen <[email protected]>
Signed-off-by Leon Romanovsky <[email protected]>
Signed-off-by Doug Ledford <[email protected]>
drivers/infiniband/hw/mlx5/srq.c +3 -8
@@ -165,8 +165,6 @@ static int create_srq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_srq *srq,int err;int i;struct mlx5_wqe_srq_next_seg *next; -int page_shift; -int npages; err =mlx5_db_alloc (dev->mdev, &srq->db);if (err) {
@@ -179,7 +177,6 @@ static int create_srq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_srq *srq, err = -ENOMEM ; goto err_db; } - page_shift = srq->buf.page_shift; srq->head =0 ; srq->tail = srq->msrq.max -1 ;
@@ -191,10 +188,8 @@ static int create_srq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_srq *srq,cpu_to_be16 ((i +1 ) & (srq->msrq.max -1 )); } - npages =DIV_ROUND_UP (srq->buf.npages,1 << (page_shift -PAGE_SHIFT )); -mlx5_ib_dbg (dev,"buf_size %d, page_shift %d, npages %d, calc npages %d\n" , - buf_size, page_shift, srq->buf.npages, npages); - in->pas =mlx5_vzalloc (sizeof (*in->pas) * npages); +mlx5_ib_dbg (dev,"srq->buf.page_shift = %d\n" , srq->buf.page_shift); + in->pas =mlx5_vzalloc (sizeof (*in->pas) * srq->buf.npages);if (!in->pas) { err = -ENOMEM ; goto err_buf;
@@ -208,7 +203,7 @@ static int create_srq_kernel(struct mlx5_ib_dev *dev, struct mlx5_ib_srq *srq, } srq->wq_sig = !!srq_signature; - in->log_page_size = page_shift -MLX5_ADAPTER_PAGE_SHIFT ; + in->log_page_size = srq->buf.page_shift -MLX5_ADAPTER_PAGE_SHIFT ;if (MLX5_CAP_GEN (dev->mdev, cqe_version) ==MLX5_CQE_VERSION_V1 && in->type ==IB_SRQT_XRC ) in->user_index =MLX5_IB_DEFAULT_UIDX ;