From d00a3e0199bf600150331a151d74a281ec13baeb Mon Sep 17 00:00:00 2001 From: Knut Omang Date: Thu, 2 Jun 2016 10:38:07 +0200 Subject: [PATCH] sif: DNE QPs were created even with limited mode This could potentially lead to situations where it is not possible to upgrade firmware. Also make all QP creation fail in limited mode, otherwise someone might create one and try to run traffic on it. In particular any use of PQPs will lead to kernel null pointer exceptions as they have not been initialized. Signed-off-by: Knut Omang --- drivers/infiniband/hw/sif/sif_qp.c | 8 ++++++++ drivers/infiniband/hw/sif/sif_r3.c | 3 +++ 2 files changed, 11 insertions(+) diff --git a/drivers/infiniband/hw/sif/sif_qp.c b/drivers/infiniband/hw/sif/sif_qp.c index c7fdfc99ae9b..ab88057f6391 100644 --- a/drivers/infiniband/hw/sif/sif_qp.c +++ b/drivers/infiniband/hw/sif/sif_qp.c @@ -171,6 +171,14 @@ struct sif_qp *create_qp(struct sif_dev *sdev, u32 max_sge; int min_tso_inline; + /* In limited mode QPs are not usable and possibly hazardous as nothing is set up + * avoid any creation of any such: + */ + if (unlikely(sdev->limited_mode)) { + sif_log(sdev, SIF_INFO, "limited mode does not support QP creation!"); + return ERR_PTR(-ENODEV); + } + if (init_attr->send_cq) send_cq = to_scq(init_attr->send_cq); if (init_attr->recv_cq) diff --git a/drivers/infiniband/hw/sif/sif_r3.c b/drivers/infiniband/hw/sif/sif_r3.c index 455025787cf2..06b270d28cc2 100644 --- a/drivers/infiniband/hw/sif/sif_r3.c +++ b/drivers/infiniband/hw/sif/sif_r3.c @@ -36,6 +36,9 @@ int sif_r3_init(struct sif_dev *sdev) int ret; bool dne_qp_alloc = false; + if (sdev->limited_mode) + return 0; + if (eps_fw_version_lt(&sdev->es[sdev->mbox_epsc], 0, 58)) { ret = sif_hw_allocate_dne_qp(sdev); if (ret) -- 2.50.1