Skip to content

Commit

Permalink
io_uring/msg_ring: check for dead submitter task
Browse files Browse the repository at this point in the history
The change for improving the handling of the target CQE posting
inadvertently dropped the NULL check for the submitter task on the target
ring, reinstate that.

Fixes: 0617bb5 ("io_uring/msg_ring: improve handling of target CQE posting")
Reported-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
  • Loading branch information
axboe committed Jul 1, 2024
1 parent 50cf5f3 commit b0727b1
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions io_uring/msg_ring.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,16 +86,21 @@ static void io_msg_tw_complete(struct io_kiocb *req, struct io_tw_state *ts)
percpu_ref_put(&ctx->refs);
}

static void io_msg_remote_post(struct io_ring_ctx *ctx, struct io_kiocb *req,
int res, u32 cflags, u64 user_data)
static int io_msg_remote_post(struct io_ring_ctx *ctx, struct io_kiocb *req,
int res, u32 cflags, u64 user_data)
{
req->task = READ_ONCE(ctx->submitter_task);
if (!req->task) {
kmem_cache_free(req_cachep, req);
return -EOWNERDEAD;
}
req->cqe.user_data = user_data;
io_req_set_res(req, res, cflags);
percpu_ref_get(&ctx->refs);
req->ctx = ctx;
req->task = READ_ONCE(ctx->submitter_task);
req->io_task_work.func = io_msg_tw_complete;
io_req_task_work_add_remote(req, ctx, IOU_F_TWQ_LAZY_WAKE);
return 0;
}

static struct io_kiocb *io_msg_get_kiocb(struct io_ring_ctx *ctx)
Expand Down Expand Up @@ -125,8 +130,8 @@ static int io_msg_data_remote(struct io_kiocb *req)
if (msg->flags & IORING_MSG_RING_FLAGS_PASS)
flags = msg->cqe_flags;

io_msg_remote_post(target_ctx, target, msg->len, flags, msg->user_data);
return 0;
return io_msg_remote_post(target_ctx, target, msg->len, flags,
msg->user_data);
}

static int io_msg_ring_data(struct io_kiocb *req, unsigned int issue_flags)
Expand Down

0 comments on commit b0727b1

Please sign in to comment.