> From: Nicolin Chen <[email protected]>
> Sent: Friday, May 22, 2026 8:37 AM
> 
> The veventq memory allocation happens inside the spinlock. Given its depth
> is decided by the user space, this leaves a vulnerability, where userspace
> can allocate large queues to exhaust atomic memory reserves.
> 
> Move the allocation outside the spinlock and use GFP_NOWAIT, which can
> fail
> fast under memory pressure without dipping into the GFP_ATOMIC reserves
> or
> direct-reclaiming from the threaded IRQ handler. On allocation failure,
> queue the lost_events_header (so userspace learns of the drop) and return
> -ENOMEM so the caller learns of the kernel-side memory pressure.
> 
> This is intentionally distinct from the queue-overflow path, which also
> queues the lost_events_header but returns 0: a full queue is an expected
> userspace-pacing condition rather than a kernel error.
> 
> A subsequent change will cap the upper bound of the veventq_depth.
> 
> Fixes: e36ba5ab808e ("iommufd: Add IOMMUFD_OBJ_VEVENTQ and
> IOMMUFD_CMD_VEVENTQ_ALLOC")
> Cc: [email protected]
> Reviewed-by: Jason Gunthorpe <[email protected]>
> Signed-off-by: Nicolin Chen <[email protected]>

Reviewed-by: Kevin Tian <[email protected]>

Reply via email to