• Jens Axboe's avatar
    io_uring/kbuf: don't allow registered buffer rings on highmem pages · f8024f1f
    Jens Axboe authored
    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: default avatarJens Axboe <axboe@kernel.dk>
    f8024f1f
kbuf.c 15.4 KB