aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMoni Shoua <monis@mellanox.com>2017-12-24 06:54:58 -0500
committerJason Gunthorpe <jgg@mellanox.com>2017-12-27 17:24:41 -0500
commit4a50881bbac309e6f0684816a180bc3c14e1485d (patch)
treeeb5e418661ec128520876d450984f164ede32706
parent05d14e7b0c138cb07ba30e464f47b39434f3fdef (diff)
IB/core: Verify that QP is security enabled in create and destroy
The XRC target QP create flow sets up qp_sec only if there is an IB link with LSM security enabled. However, several other related uAPI entry points blindly follow the qp_sec NULL pointer, resulting in a possible oops. Check for NULL before using qp_sec. Cc: <stable@vger.kernel.org> # v4.12 Fixes: d291f1a65232 ("IB/core: Enforce PKey security on QPs") Reviewed-by: Daniel Jurgens <danielj@mellanox.com> Signed-off-by: Moni Shoua <monis@mellanox.com> Signed-off-by: Leon Romanovsky <leon@kernel.org> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
-rw-r--r--drivers/infiniband/core/security.c3
-rw-r--r--drivers/infiniband/core/verbs.c3
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/infiniband/core/security.c b/drivers/infiniband/core/security.c
index feafdb961c48..59b2f96d986a 100644
--- a/drivers/infiniband/core/security.c
+++ b/drivers/infiniband/core/security.c
@@ -386,6 +386,9 @@ int ib_open_shared_qp_security(struct ib_qp *qp, struct ib_device *dev)
386 if (ret) 386 if (ret)
387 return ret; 387 return ret;
388 388
389 if (!qp->qp_sec)
390 return 0;
391
389 mutex_lock(&real_qp->qp_sec->mutex); 392 mutex_lock(&real_qp->qp_sec->mutex);
390 ret = check_qp_port_pkey_settings(real_qp->qp_sec->ports_pkeys, 393 ret = check_qp_port_pkey_settings(real_qp->qp_sec->ports_pkeys,
391 qp->qp_sec); 394 qp->qp_sec);
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index 3fb8fb6cc824..e36d27ed4daa 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -1438,7 +1438,8 @@ int ib_close_qp(struct ib_qp *qp)
1438 spin_unlock_irqrestore(&real_qp->device->event_handler_lock, flags); 1438 spin_unlock_irqrestore(&real_qp->device->event_handler_lock, flags);
1439 1439
1440 atomic_dec(&real_qp->usecnt); 1440 atomic_dec(&real_qp->usecnt);
1441 ib_close_shared_qp_security(qp->qp_sec); 1441 if (qp->qp_sec)
1442 ib_close_shared_qp_security(qp->qp_sec);
1442 kfree(qp); 1443 kfree(qp);
1443 1444
1444 return 0; 1445 return 0;