]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
io_uring: fortify io_pin_pages with a warning
authorPavel Begunkov <asml.silence@gmail.com>
Fri, 15 Nov 2024 16:54:38 +0000 (16:54 +0000)
committerJens Axboe <axboe@kernel.dk>
Fri, 15 Nov 2024 16:58:34 +0000 (09:58 -0700)
We're a bit too frivolous with types of nr_pages arguments, converting
it to long and back to int, passing an unsigned int pointer as an int
pointer and so on. Shouldn't cause any problem but should be carefully
reviewed, but until then let's add a WARN_ON_ONCE check to be more
confident callers don't pass poorely checked arguents.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/d48e0c097cbd90fb47acaddb6c247596510d8cfc.1731689588.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/memmap.c

index 85c66fa549562f5dbd57aae3b2dfd6516029d848..6ab59c60dfd0ac77d31c33447342584d04a31897 100644 (file)
@@ -140,6 +140,8 @@ struct page **io_pin_pages(unsigned long uaddr, unsigned long len, int *npages)
        nr_pages = end - start;
        if (WARN_ON_ONCE(!nr_pages))
                return ERR_PTR(-EINVAL);
+       if (WARN_ON_ONCE(nr_pages > INT_MAX))
+               return ERR_PTR(-EOVERFLOW);
 
        pages = kvmalloc_array(nr_pages, sizeof(struct page *), GFP_KERNEL);
        if (!pages)