Linux RDMA and InfiniBand development
 help / color / mirror / Atom feed
From: Edward Srouji <edwards@nvidia.com>
To: Jason Gunthorpe <jgg@ziepe.ca>, Leon Romanovsky <leon@kernel.org>,
	"Dennis Dalessandro" <dennis.dalessandro@cornelisnetworks.com>,
	Gal Pressman <galpress@amazon.com>,
	Steve Wise <larrystevenwise@gmail.com>,
	Mark Bloch <markb@mellanox.com>,
	Neta Ostrovsky <netao@nvidia.com>,
	Mark Zhang <markzhang@nvidia.com>,
	Mark Zhang <markz@mellanox.com>, Majd Dibbiny <majd@mellanox.com>,
	Yishai Hadas <yishaih@nvidia.com>
Cc: <linux-rdma@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	"Edward Srouji" <edwards@nvidia.com>,
	Patrisious Haddad <phaddad@nvidia.com>,
	"Michael Guralnik" <michaelgur@nvidia.com>
Subject: [PATCH rdma-next 3/8] RDMA/core: Fix potential use after free in ib_destroy_cq_user()
Date: Wed, 1 Jul 2026 15:28:17 +0300	[thread overview]
Message-ID: <20260701-restrack-uaf-fix-resub-v1-3-c660cda4df2a@nvidia.com> (raw)
In-Reply-To: <20260701-restrack-uaf-fix-resub-v1-0-c660cda4df2a@nvidia.com>

From: Patrisious Haddad <phaddad@nvidia.com>

When accessing a CQ via the netlink path the only synchronization
mechanism for the said CQ is rdma_restrack_get().
Currently, rdma_restrack_del() is invoked at the end of
ib_destroy_cq_user(), which is too late, since by that point
vendor-specific resources associated with the CQ might already be
freed. This can leave a short window where the CQ remains accessible
through restrack, leading to a potential use-after-free.

Fix this by moving the rdma_restrack_begin_del() call to the start of
ib_destroy_cq_user(), ensuring that the CQ is removed from restrack
before its internal resources are released. This guarantees that no new
users hold references to a CQ that is in the process of destruction.

In addition, this change preserves the intended inverted order
between create and destroy routines: resources are added to
restrack at the end of successful creation, and hence shall be removed
from the restrack first thing during the destruction flow, which keeps
the lifecycle management consistent and predictable.

Fixes: 08f294a1524b ("RDMA/core: Add resource tracking for create and destroy CQs")
Signed-off-by: Patrisious Haddad <phaddad@nvidia.com>
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Signed-off-by: Edward Srouji <edwards@nvidia.com>
---
 drivers/infiniband/core/verbs.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index 7abb89a4e6a019b965d36446d64609ed2c33d1c0..568cb71da726a61997149e92aa570e0bcb76926c 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -2247,11 +2247,15 @@ int ib_destroy_cq_user(struct ib_cq *cq, struct ib_udata *udata)
 	if (atomic_read(&cq->usecnt))
 		return -EBUSY;
 
+	rdma_restrack_begin_del(&cq->res);
+
 	ret = cq->device->ops.destroy_cq(cq, udata);
-	if (ret)
+	if (ret) {
+		rdma_restrack_abort_del(&cq->res);
 		return ret;
+	}
 
-	rdma_restrack_del(&cq->res);
+	rdma_restrack_commit_del(&cq->res);
 	kfree(cq);
 	return ret;
 }

-- 
2.49.0


  parent reply	other threads:[~2026-07-01 12:29 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-01 12:28 [PATCH rdma-next 0/8] RDMA/core: Fix restrack UAF in destroy flows Edward Srouji
2026-07-01 12:28 ` [PATCH rdma-next 1/8] RDMA/core: Add rdma_restrack_begin/abort/commit_del() operations Edward Srouji
2026-07-02 17:46   ` Jason Gunthorpe
2026-07-09 18:02     ` Edward Srouji
2026-07-01 12:28 ` [PATCH rdma-next 2/8] RDMA/core: Fix use after free in ib_query_qp() Edward Srouji
2026-07-01 12:28 ` Edward Srouji [this message]
2026-07-01 12:28 ` [PATCH rdma-next 4/8] RDMA/core: Fix potential use after free in ib_destroy_srq_user() Edward Srouji
2026-07-01 12:28 ` [PATCH rdma-next 5/8] RDMA/core: Fix potential use after free in counter_release() Edward Srouji
2026-07-01 12:28 ` [PATCH rdma-next 6/8] RDMA/core: Fix potential use after free in ib_free_cq() Edward Srouji
2026-07-01 12:28 ` [PATCH rdma-next 7/8] RDMA/core: Fix potential use after free in uverbs_free_dmah() Edward Srouji
2026-07-01 12:28 ` [PATCH rdma-next 8/8] RDMA/core: Fix potential use after free in ib_dealloc_pd_user() Edward Srouji

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260701-restrack-uaf-fix-resub-v1-3-c660cda4df2a@nvidia.com \
    --to=edwards@nvidia.com \
    --cc=dennis.dalessandro@cornelisnetworks.com \
    --cc=galpress@amazon.com \
    --cc=jgg@ziepe.ca \
    --cc=larrystevenwise@gmail.com \
    --cc=leon@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=majd@mellanox.com \
    --cc=markb@mellanox.com \
    --cc=markz@mellanox.com \
    --cc=markzhang@nvidia.com \
    --cc=michaelgur@nvidia.com \
    --cc=netao@nvidia.com \
    --cc=phaddad@nvidia.com \
    --cc=yishaih@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox