io_uring/kbuf: hold io_buffer_list reference over mmap
authorJens Axboe <axboe@kernel.dk>
Tue, 2 Apr 2024 22:16:03 +0000 (16:16 -0600)
committerJens Axboe <axboe@kernel.dk>
Wed, 3 Apr 2024 01:03:27 +0000 (19:03 -0600)
commit561e4f9451d65fc2f7eef564e0064373e3019793
tree2e64d28297c67422596b02f7504fe734a554676a
parent6b69c4ab4f685327d9e10caf0d84217ba23a8c4b
io_uring/kbuf: hold io_buffer_list reference over mmap

If we look up the kbuf, ensure that it doesn't get unregistered until
after we're done with it. Since we're inside mmap, we cannot safely use
the io_uring lock. Rely on the fact that we can lookup the buffer list
under RCU now and grab a reference to it, preventing it from being
unregistered until we're done with it. The lookup returns the
io_buffer_list directly with it referenced.

Cc: stable@vger.kernel.org # v6.4+
Fixes: 5cf4f52e6d8a ("io_uring: free io_buffer_list entries via RCU")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c
io_uring/kbuf.c
io_uring/kbuf.h