RDMA: Fix double-free in srq creation error flow
authorJack Morgenstein <jackm@dev.mellanox.co.il>
Mon, 16 Sep 2019 07:11:54 +0000 (10:11 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 16 Sep 2019 17:37:38 +0000 (14:37 -0300)
The cited commit introduced a double-free of the srq buffer in the error
flow of procedure __uverbs_create_xsrq().

The problem is that ib_destroy_srq_user() called in the error flow also
frees the srq buffer.

Thus, if uverbs_response() fails in __uverbs_create_srq(), the srq buffer
will be freed twice.

Cc: <stable@vger.kernel.org>
Fixes: 68e326dea1db ("RDMA: Handle SRQ allocations by IB/core")
Link: https://lore.kernel.org/r/20190916071154.20383-5-leon@kernel.org
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Reviewed-by: Jason Gunthorpe <jgg@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/core/uverbs_cmd.c

index 8f4fd4fac1593afa89496d881657d1682412b706..13af88da5f7920378d0311189102cc09c03b64f4 100644 (file)
@@ -3482,7 +3482,8 @@ static int __uverbs_create_xsrq(struct uverbs_attr_bundle *attrs,
 
 err_copy:
        ib_destroy_srq_user(srq, uverbs_get_cleared_udata(attrs));
-
+       /* It was released in ib_destroy_srq_user */
+       srq = NULL;
 err_free:
        kfree(srq);
 err_put: