diff options
author | Andrew Boyer <andrew.boyer@dell.com> | 2016-11-23 12:39:23 -0500 |
---|---|---|
committer | Doug Ledford <dledford@redhat.com> | 2016-12-12 16:31:45 -0500 |
commit | 5b9ea16c5488e577b26cc198ac63550b746ce3b9 (patch) | |
tree | 9dc62345572d7263bdbe5c244b7b00e88d25f560 /drivers/infiniband/sw | |
parent | accacb8f51c299965939ac56926d1c718e2691a1 (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.c | 7 |
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 | ||
580 | err2: | 580 | err3: |
581 | rxe_drop_index(qp); | 581 | rxe_drop_index(qp); |
582 | err2: | ||
582 | rxe_drop_ref(qp); | 583 | rxe_drop_ref(qp); |
583 | err1: | 584 | err1: |
584 | return ERR_PTR(err); | 585 | return ERR_PTR(err); |