Skip to content

Commit 6d541d6

Browse files
committed
Merge tag 'io_uring-6.10-20240530' of git://git.kernel.dk/linux
Pull io_uring fixes from Jens Axboe: "A couple of minor fixes for issues introduced in the 6.10 merge window: - Ensure that all read/write ops have an appropriate cleanup handler set (Breno) - Regression for applications still doing multiple mmaps even if FEAT_SINGLE_MMAP is set (me) - Move kmsg inquiry setting above any potential failure point, avoiding a spurious NONEMPTY flag setting on early error (me)" * tag 'io_uring-6.10-20240530' of git://git.kernel.dk/linux: io_uring/net: assign kmsg inq/flags before buffer selection io_uring/rw: Free iovec before cleaning async data io_uring: don't attempt to mmap larger than what the user asks for
2 parents b050496 + 18414a4 commit 6d541d6

File tree

3 files changed

+11
-5
lines changed

3 files changed

+11
-5
lines changed

io_uring/memmap.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ __cold int io_uring_mmap(struct file *file, struct vm_area_struct *vma)
244244
struct io_ring_ctx *ctx = file->private_data;
245245
size_t sz = vma->vm_end - vma->vm_start;
246246
long offset = vma->vm_pgoff << PAGE_SHIFT;
247+
unsigned int npages;
247248
void *ptr;
248249

249250
ptr = io_uring_validate_mmap_request(file, vma->vm_pgoff, sz);
@@ -253,8 +254,8 @@ __cold int io_uring_mmap(struct file *file, struct vm_area_struct *vma)
253254
switch (offset & IORING_OFF_MMAP_MASK) {
254255
case IORING_OFF_SQ_RING:
255256
case IORING_OFF_CQ_RING:
256-
return io_uring_mmap_pages(ctx, vma, ctx->ring_pages,
257-
ctx->n_ring_pages);
257+
npages = min(ctx->n_ring_pages, (sz + PAGE_SIZE - 1) >> PAGE_SHIFT);
258+
return io_uring_mmap_pages(ctx, vma, ctx->ring_pages, npages);
258259
case IORING_OFF_SQES:
259260
return io_uring_mmap_pages(ctx, vma, ctx->sqe_pages,
260261
ctx->n_sqe_pages);

io_uring/net.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,16 +1127,16 @@ int io_recv(struct io_kiocb *req, unsigned int issue_flags)
11271127
flags |= MSG_DONTWAIT;
11281128

11291129
retry_multishot:
1130+
kmsg->msg.msg_inq = -1;
1131+
kmsg->msg.msg_flags = 0;
1132+
11301133
if (io_do_buffer_select(req)) {
11311134
ret = io_recv_buf_select(req, kmsg, &len, issue_flags);
11321135
if (unlikely(ret))
11331136
goto out_free;
11341137
sr->buf = NULL;
11351138
}
11361139

1137-
kmsg->msg.msg_inq = -1;
1138-
kmsg->msg.msg_flags = 0;
1139-
11401140
if (flags & MSG_WAITALL)
11411141
min_ret = iov_iter_count(&kmsg->msg.msg_iter);
11421142

io_uring/opdef.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,10 +516,12 @@ const struct io_cold_def io_cold_defs[] = {
516516
},
517517
[IORING_OP_READ_FIXED] = {
518518
.name = "READ_FIXED",
519+
.cleanup = io_readv_writev_cleanup,
519520
.fail = io_rw_fail,
520521
},
521522
[IORING_OP_WRITE_FIXED] = {
522523
.name = "WRITE_FIXED",
524+
.cleanup = io_readv_writev_cleanup,
523525
.fail = io_rw_fail,
524526
},
525527
[IORING_OP_POLL_ADD] = {
@@ -582,10 +584,12 @@ const struct io_cold_def io_cold_defs[] = {
582584
},
583585
[IORING_OP_READ] = {
584586
.name = "READ",
587+
.cleanup = io_readv_writev_cleanup,
585588
.fail = io_rw_fail,
586589
},
587590
[IORING_OP_WRITE] = {
588591
.name = "WRITE",
592+
.cleanup = io_readv_writev_cleanup,
589593
.fail = io_rw_fail,
590594
},
591595
[IORING_OP_FADVISE] = {
@@ -692,6 +696,7 @@ const struct io_cold_def io_cold_defs[] = {
692696
},
693697
[IORING_OP_READ_MULTISHOT] = {
694698
.name = "READ_MULTISHOT",
699+
.cleanup = io_readv_writev_cleanup,
695700
},
696701
[IORING_OP_WAITID] = {
697702
.name = "WAITID",

0 commit comments

Comments
 (0)