Patch "RDMA/qedr: Fix and simplify memory leak in PD alloc" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
RDMA/qedr: Fix and simplify memory leak in PD alloc
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
rdma-qedr-fix-and-simplify-memory-leak-in-pd-alloc.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Jun 15 16:35:05 CEST 2017
From: Ram Amrani <[email protected]>
Date: Tue, 24 Jan 2017 13:51:42 +0200
Subject: RDMA/qedr: Fix and simplify memory leak in PD alloc
From: Ram Amrani <[email protected]>
[ Upstream commit 9c1e0228ab35e52d30abf4b5629c28350833fbcb ]
Free the PD if no internal resources were available. Move userspace code under the relevant 'if'.
--- drivers/infiniband/hw/qedr/verbs.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-)
drivers/infiniband/hw/qedr/verbs.c +18 -8
@@ -471,8 +471,6 @@ struct ib_pd *qedr_alloc_pd(struct ib_de struct ib_ucontext *context, struct ib_udata *udata) { struct qedr_dev *dev = get_qedr_dev(ibdev); -struct qedr_ucontext *uctx =NULL ; -struct qedr_alloc_pd_uresp uresp;struct qedr_pd *pd;u16 pd_id;int rc;
@@ -489,21 +487,33 @@ struct ib_pd *qedr_alloc_pd(struct ib_deif (!pd)return ERR_PTR (-ENOMEM ); - dev->ops->rdma_alloc_pd (dev->rdma_ctx, &pd_id); + rc = dev->ops->rdma_alloc_pd (dev->rdma_ctx, &pd_id); +if (rc) + goto err; - uresp.pd_id = pd_id; pd->pd_id = pd_id;if (udata && context) { +struct qedr_alloc_pd_uresp uresp; + + uresp.pd_id = pd_id; + rc =ib_copy_to_udata (udata, &uresp,sizeof (uresp)); -if (rc) +if (rc) {DP_ERR (dev,"copy error pd_id=0x%x.\n" , pd_id); - uctx =get_qedr_ucontext (context); - uctx->pd = pd; - pd->uctx = uctx; + dev->ops->rdma_dealloc_pd (dev->rdma_ctx, pd_id); + goto err; + } + + pd->uctx =get_qedr_ucontext (context); + pd->uctx->pd = pd; }return &pd->ibpd; + +err: +kfree (pd); +return ERR_PTR (rc); }int qedr_dealloc_pd (struct ib_pd *ibpd)
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/rdma-qedr-don-t-spam-dmesg-if-qp-is-in-error-state.patch queue-4.9/rdma-qedr-dispatch-port-active-event-from-qedr_add.patch queue-4.9/rdma-qedr-don-t-reset-qp-when-queues-aren-t-flushed.patch queue-4.9/rdma-qedr-fix-and-simplify-memory-leak-in-pd-alloc.patch queue-4.9/rdma-qedr-return-max-inline-data-in-qp-query-result.patch