RDMA/core: Fix GID entry ref leak when create_ah fails
authorSaravanan Vajravel <saravanan.vajravel@broadcom.com>
Sat, 1 Apr 2023 06:34:24 +0000 (23:34 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 13 Apr 2023 15:17:32 +0000 (12:17 -0300)
If AH create request fails, release sgid_attr to avoid GID entry
referrence leak reported while releasing GID table

Fixes: 1a1f460ff151 ("RDMA: Hold the sgid_attr inside the struct ib_ah/qp")
Link: https://lore.kernel.org/r/20230401063424.342204-1-saravanan.vajravel@broadcom.com
Reviewed-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Saravanan Vajravel <saravanan.vajravel@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/verbs.c

index 11b1c1603aeb44e6d0dcbc3904a57a5bf314d03e..b99b3cc283b650b9d001bccbfe0bcfdee6100573 100644 (file)
@@ -532,6 +532,8 @@ static struct ib_ah *_rdma_create_ah(struct ib_pd *pd,
        else
                ret = device->ops.create_ah(ah, &init_attr, NULL);
        if (ret) {
+               if (ah->sgid_attr)
+                       rdma_put_gid_attr(ah->sgid_attr);
                kfree(ah);
                return ERR_PTR(ret);
        }