mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 23:00:21 +00:00
io_uring: fix no lock protection for ctx->cq_extra
ctx->cq_extra should be protected by completion lock so that the req_need_defer() does the right check. Cc: stable@vger.kernel.org Signed-off-by: Hao Xu <haoxu@linux.alibaba.com> Link: https://lore.kernel.org/r/20211125092103.224502-2-haoxu@linux.alibaba.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
5562a8d71a
commit
e302f1046f
@ -6537,12 +6537,15 @@ static __cold void io_drain_req(struct io_kiocb *req)
|
||||
u32 seq = io_get_sequence(req);
|
||||
|
||||
/* Still need defer if there is pending req in defer list. */
|
||||
spin_lock(&ctx->completion_lock);
|
||||
if (!req_need_defer(req, seq) && list_empty_careful(&ctx->defer_list)) {
|
||||
spin_unlock(&ctx->completion_lock);
|
||||
queue:
|
||||
ctx->drain_active = false;
|
||||
io_req_task_queue(req);
|
||||
return;
|
||||
}
|
||||
spin_unlock(&ctx->completion_lock);
|
||||
|
||||
ret = io_req_prep_async(req);
|
||||
if (ret) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user