]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring/memmap: don't use page_address() on a highmem page
authorJens Axboe <axboe@kernel.dk>
Mon, 12 May 2025 15:06:06 +0000 (09:06 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 May 2025 12:31:55 +0000 (14:31 +0200)
commit f446c6311e86618a1f81eb576b56a6266307238f upstream.

For older/32-bit systems with highmem, don't assume that the pages in
a mapped region are always going to be mapped. If io_region_init_ptr()
finds that the pages are coalescable, also check if the first page is
a HighMem page or not. If it is, fall through to the usual vmap()
mapping rather than attempt to get the unmapped page address.

Cc: stable@vger.kernel.org
Fixes: c4d0ac1c1567 ("io_uring/memmap: optimise single folio regions")
Link: https://lore.kernel.org/all/681fe2fb.050a0220.f2294.001a.GAE@google.com/
Reported-by: syzbot+5b8c4abafcb1d791ccfc@syzkaller.appspotmail.com
Link: https://lore.kernel.org/all/681fed0a.050a0220.f2294.001c.GAE@google.com/
Reported-by: syzbot+6456a99dfdc2e78c4feb@syzkaller.appspotmail.com
Tested-by: syzbot+6456a99dfdc2e78c4feb@syzkaller.appspotmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
io_uring/memmap.c

index 36113454442744edd6b85d00301e176e2bfc5212..0929361e0c4984ef2e103a570063e66382d48b80 100644 (file)
@@ -116,7 +116,7 @@ static int io_region_init_ptr(struct io_mapped_region *mr)
        void *ptr;
 
        if (io_check_coalesce_buffer(mr->pages, mr->nr_pages, &ifd)) {
-               if (ifd.nr_folios == 1) {
+               if (ifd.nr_folios == 1 && !PageHighMem(mr->pages[0])) {
                        mr->ptr = page_address(mr->pages[0]);
                        return 0;
                }