io_uring/kbuf: don't allow registered buffer rings on highmem pages
syzbot reports that registering a mapped buffer ring on arm32 can trigger an OOPS. Registered buffer rings have two modes, one of them is the application passing in the memory that the buffer ring should reside in. Once those pages are mapped, we use page_address() to get a virtual address. This will obviously fail on highmem pages, which aren't mapped. Add a check if we have any highmem pages after mapping, and fail the attempt to register a provided buffer ring if we do. This will return the same error as kernels that don't support provided buffer rings to begin with. Link: https://lore.kernel.org/io-uring/000000000000af635c0606bcb889@google.com/ Fixes: c56e022c ("io_uring: add support for user mapped provided buffer ring") Cc: stable@vger.kernel.org Reported-by: <syzbot+2113e61b8848fa7951d8@syzkaller.appspotmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Please register or sign in to comment