]> git.itanic.dy.fi Git - linux-stable/commit
io_uring/kbuf: don't allow registered buffer rings on highmem pages
authorJens Axboe <axboe@kernel.dk>
Tue, 3 Oct 2023 00:14:08 +0000 (18:14 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 3 Oct 2023 14:12:28 +0000 (08:12 -0600)
commitf8024f1f36a30a082b0457d5779c8847cea57f57
tree28a39457d23b95f0e264808ddd1915373193934a
parenta52d4f657568d6458e873f74a9602e022afe666f
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: c56e022c0a27 ("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>
io_uring/kbuf.c