aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/sw
diff options
context:
space:
mode:
authorAndrew Boyer <andrew.boyer@dell.com>2016-11-23 12:39:23 -0500
committerDoug Ledford <dledford@redhat.com>2016-12-12 16:31:45 -0500
commit5b9ea16c5488e577b26cc198ac63550b746ce3b9 (patch)
tree9dc62345572d7263bdbe5c244b7b00e88d25f560 /drivers/infiniband/sw
parentaccacb8f51c299965939ac56926d1c718e2691a1 (diff)
IB/rxe: Fix ref leak in rxe_create_qp()
The udata->inlen error path needs to clean up the ref added by rxe_alloc(). Signed-off-by: Andrew Boyer <andrew.boyer@dell.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
Diffstat (limited to 'drivers/infiniband/sw')
-rw-r--r--drivers/infiniband/sw/rxe/rxe_verbs.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c
index de39b0a081de..071430c594b7 100644
--- a/drivers/infiniband/sw/rxe/rxe_verbs.c
+++ b/drivers/infiniband/sw/rxe/rxe_verbs.c
@@ -564,7 +564,7 @@ static struct ib_qp *rxe_create_qp(struct ib_pd *ibpd,
564 if (udata) { 564 if (udata) {
565 if (udata->inlen) { 565 if (udata->inlen) {
566 err = -EINVAL; 566 err = -EINVAL;
567 goto err1; 567 goto err2;
568 } 568 }
569 qp->is_user = 1; 569 qp->is_user = 1;
570 } 570 }
@@ -573,12 +573,13 @@ static struct ib_qp *rxe_create_qp(struct ib_pd *ibpd,
573 573
574 err = rxe_qp_from_init(rxe, qp, pd, init, udata, ibpd); 574 err = rxe_qp_from_init(rxe, qp, pd, init, udata, ibpd);
575 if (err) 575 if (err)
576 goto err2; 576 goto err3;
577 577
578 return &qp->ibqp; 578 return &qp->ibqp;
579 579
580err2: 580err3:
581 rxe_drop_index(qp); 581 rxe_drop_index(qp);
582err2:
582 rxe_drop_ref(qp); 583 rxe_drop_ref(qp);
583err1: 584err1:
584 return ERR_PTR(err); 585 return ERR_PTR(err);