diff options
-rw-r--r-- | fs/io_uring.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c index 18cecb6a0151..84efb8956734 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c | |||
@@ -2443,7 +2443,7 @@ static int io_sqe_buffer_unregister(struct io_ring_ctx *ctx) | |||
2443 | 2443 | ||
2444 | if (ctx->account_mem) | 2444 | if (ctx->account_mem) |
2445 | io_unaccount_mem(ctx->user, imu->nr_bvecs); | 2445 | io_unaccount_mem(ctx->user, imu->nr_bvecs); |
2446 | kfree(imu->bvec); | 2446 | kvfree(imu->bvec); |
2447 | imu->nr_bvecs = 0; | 2447 | imu->nr_bvecs = 0; |
2448 | } | 2448 | } |
2449 | 2449 | ||
@@ -2535,9 +2535,9 @@ static int io_sqe_buffer_register(struct io_ring_ctx *ctx, void __user *arg, | |||
2535 | if (!pages || nr_pages > got_pages) { | 2535 | if (!pages || nr_pages > got_pages) { |
2536 | kfree(vmas); | 2536 | kfree(vmas); |
2537 | kfree(pages); | 2537 | kfree(pages); |
2538 | pages = kmalloc_array(nr_pages, sizeof(struct page *), | 2538 | pages = kvmalloc_array(nr_pages, sizeof(struct page *), |
2539 | GFP_KERNEL); | 2539 | GFP_KERNEL); |
2540 | vmas = kmalloc_array(nr_pages, | 2540 | vmas = kvmalloc_array(nr_pages, |
2541 | sizeof(struct vm_area_struct *), | 2541 | sizeof(struct vm_area_struct *), |
2542 | GFP_KERNEL); | 2542 | GFP_KERNEL); |
2543 | if (!pages || !vmas) { | 2543 | if (!pages || !vmas) { |
@@ -2549,7 +2549,7 @@ static int io_sqe_buffer_register(struct io_ring_ctx *ctx, void __user *arg, | |||
2549 | got_pages = nr_pages; | 2549 | got_pages = nr_pages; |
2550 | } | 2550 | } |
2551 | 2551 | ||
2552 | imu->bvec = kmalloc_array(nr_pages, sizeof(struct bio_vec), | 2552 | imu->bvec = kvmalloc_array(nr_pages, sizeof(struct bio_vec), |
2553 | GFP_KERNEL); | 2553 | GFP_KERNEL); |
2554 | ret = -ENOMEM; | 2554 | ret = -ENOMEM; |
2555 | if (!imu->bvec) { | 2555 | if (!imu->bvec) { |
@@ -2588,6 +2588,7 @@ static int io_sqe_buffer_register(struct io_ring_ctx *ctx, void __user *arg, | |||
2588 | } | 2588 | } |
2589 | if (ctx->account_mem) | 2589 | if (ctx->account_mem) |
2590 | io_unaccount_mem(ctx->user, nr_pages); | 2590 | io_unaccount_mem(ctx->user, nr_pages); |
2591 | kvfree(imu->bvec); | ||
2591 | goto err; | 2592 | goto err; |
2592 | } | 2593 | } |
2593 | 2594 | ||
@@ -2610,12 +2611,12 @@ static int io_sqe_buffer_register(struct io_ring_ctx *ctx, void __user *arg, | |||
2610 | 2611 | ||
2611 | ctx->nr_user_bufs++; | 2612 | ctx->nr_user_bufs++; |
2612 | } | 2613 | } |
2613 | kfree(pages); | 2614 | kvfree(pages); |
2614 | kfree(vmas); | 2615 | kvfree(vmas); |
2615 | return 0; | 2616 | return 0; |
2616 | err: | 2617 | err: |
2617 | kfree(pages); | 2618 | kvfree(pages); |
2618 | kfree(vmas); | 2619 | kvfree(vmas); |
2619 | io_sqe_buffer_unregister(ctx); | 2620 | io_sqe_buffer_unregister(ctx); |
2620 | return ret; | 2621 | return ret; |
2621 | } | 2622 | } |