]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 5 Oct 2019 11:14:02 +0000 (13:14 +0200)
commit 3eca7fc2d8d1275d9cf0c709f0937becbfcf6d96 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/infiniband/core/uverbs_cmd.c

index 63fe14c7c68fc31586fad4cd3559a52d03d62ea0..df8e8ac2c16b4abb4b0be2c971122ad292c618e8 100644 (file)
@@ -3477,7 +3477,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: