[PATCH] iommufd: Fix event queue release use-after-free

From: Nirmoy Das

Date: Wed Oct 14 2026 - 11:03:17 EST


iommufd_eventq_fops_release() drops the file's users reference before
reading eventq->ictx. Once that reference is dropped, IOMMU_DESTROY in
another thread can remove and free the event queue, so the later load
accesses freed memory.

Read ictx while the users reference still pins the event queue, then
drop the reference and put the saved context. The context reference
taken by iommufd_eventq_init() keeps ictx valid until the put. Fault and
vEVENTQ file descriptors share this release path.

Fixes: 07838f7fd529 ("iommufd: Add iommufd fault object")
Cc: stable@xxxxxxxxxxxxxxx
Assisted-by: LLM, Specula
Signed-off-by: Nirmoy Das <nirmoyd@xxxxxxxxxx>
---
drivers/iommu/iommufd/eventq.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/iommu/iommufd/eventq.c b/drivers/iommu/iommufd/eventq.c
index 747dd5155121cbe..b8a54454dd17c76 100644
--- a/drivers/iommu/iommufd/eventq.c
+++ b/drivers/iommu/iommufd/eventq.c
@@ -396,9 +396,11 @@ static __poll_t iommufd_eventq_fops_poll(struct file *filep,
static int iommufd_eventq_fops_release(struct inode *inode, struct file *filep)
{
struct iommufd_eventq *eventq = filep->private_data;
+ /* eventq may be freed once the users reference is dropped. */
+ struct iommufd_ctx *ictx = eventq->ictx;

refcount_dec(&eventq->obj.users);
- iommufd_ctx_put(eventq->ictx);
+ iommufd_ctx_put(ictx);
return 0;
}


base-commit: 24a19b953e2a3d0ea5a8c4951a0ab8f32720c907
--
2.43.0