REDHAT-BUG-2254050: High severity The Linux Foundation Linux Kernel vulnerability
Since commit c56e022c0a27 ("iouring: add support for user mapped provided buffer ring"), landed in Linux 6.4, iouring makes it possible to allocate, mmap, and deallocate "buffer rings".
A "buffer ring" can be allocated with iouringregister(..., IORINGREGISTERPBUFRING, ...) and later deallocated with iouringregister(..., IORINGUNREGISTERPBUFRING, ...). It can be mapped into userspace using mmap() with offset IORINGOFFPBUFRING|..., which creates a VMPFNMAP mapping, meaning the MM subsystem will treat the mapping as a set of opaque page frame numbers not associated with any corresponding pages; this implies that the calling code is responsible for ensuring that the mapped memory can not be freed before the userspace mapping is removed.
However, there is no mechanism to ensure this in iouring: It is possible to just register a buffer ring with IORINGREGISTERPBUFRING, mmap() it, and then free the buffer ring's pages with IORINGUNREGISTERPBUFRING, leaving free pages mapped into userspace, which is a fairly easily exploitable situation.
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c392cbecd8eca4c53f2bf508731257d9d0a21c2d