IB/rxe: Fix ref leak in rxe_create_qp()
authorAndrew Boyer <andrew.boyer@dell.com>
Wed, 23 Nov 2016 17:39:23 +0000 (12:39 -0500)
committerDoug Ledford <dledford@redhat.com>
Mon, 12 Dec 2016 21:31:45 +0000 (16:31 -0500)
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>
drivers/infiniband/sw/rxe/rxe_verbs.c

index de39b0a..071430c 100644 (file)
@@ -564,7 +564,7 @@ static struct ib_qp *rxe_create_qp(struct ib_pd *ibpd,
        if (udata) {
                if (udata->inlen) {
                        err = -EINVAL;
-                       goto err1;
+                       goto err2;
                }
                qp->is_user = 1;
        }
@@ -573,12 +573,13 @@ static struct ib_qp *rxe_create_qp(struct ib_pd *ibpd,
 
        err = rxe_qp_from_init(rxe, qp, pd, init, udata, ibpd);
        if (err)
-               goto err2;
+               goto err3;
 
        return &qp->ibqp;
 
-err2:
+err3:
        rxe_drop_index(qp);
+err2:
        rxe_drop_ref(qp);
 err1:
        return ERR_PTR(err);