mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
io_uring/timeout: annotate data race in io_flush_timeouts()
syzbot correctly reports this as a KCSAN race, as ctx->cached_cq_tail should be read under ->uring_lock. This isn't immediately feasible in io_flush_timeouts(), but as long as we read a stable value, that should be good enough. If two io-wq threads compete on this value, then they will both end up calling io_flush_timeouts() and at least one of them will see the correct value. Reported-by: syzbot+6c48db7d94402407301e@syzkaller.appspotmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
8661d0b142
commit
42b12cb5fd
1 changed files with 1 additions and 1 deletions
|
|
@ -130,7 +130,7 @@ __cold void io_flush_timeouts(struct io_ring_ctx *ctx)
|
|||
u32 seq;
|
||||
|
||||
raw_spin_lock_irq(&ctx->timeout_lock);
|
||||
seq = ctx->cached_cq_tail - atomic_read(&ctx->cq_timeouts);
|
||||
seq = READ_ONCE(ctx->cached_cq_tail) - atomic_read(&ctx->cq_timeouts);
|
||||
|
||||
list_for_each_entry_safe(timeout, tmp, &ctx->timeout_list, list) {
|
||||
struct io_kiocb *req = cmd_to_io_kiocb(timeout);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue