Skip to content

Commit 33503c0

Browse files
committed
io_uring/memmap: cast nr_pages to size_t before shifting
If the allocated size exceeds UINT_MAX, then it's necessary to cast the mr->nr_pages value to size_t to prevent it from overflowing. In practice this isn't much of a concern as the required memory size will have been validated upfront, and accounted to the user. And > 4GB sizes will be necessary to make the lack of a cast a problem, which greatly exceeds normal user locked_vm settings that are generally in the kb to mb range. However, if root is used, then accounting isn't done, and then it's possible to hit this issue. Link: https://lore.kernel.org/all/[email protected]/ Cc: [email protected] Reported-by: [email protected] Fixes: 087f997 ("io_uring/memmap: implement mmap for regions") Signed-off-by: Jens Axboe <[email protected]>
1 parent 6f02527 commit 33503c0

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

io_uring/memmap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ static int io_region_allocate_pages(struct io_ring_ctx *ctx,
156156
unsigned long mmap_offset)
157157
{
158158
gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN;
159-
unsigned long size = mr->nr_pages << PAGE_SHIFT;
159+
size_t size = (size_t) mr->nr_pages << PAGE_SHIFT;
160160
unsigned long nr_allocated;
161161
struct page **pages;
162162
void *p;

0 commit comments

Comments
 (0)