Commit 177c6943 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring/eventfd: use ctx->rings_rcu for flags checking



Similarly to what commit e78f7b70e837 did for local task work additions,
use ->rings_rcu under RCU rather than dereference ->rings directly. See
that commit for more details.

Cc: stable@vger.kernel.org
Fixes: 79cfe9e5 ("io_uring/register: add IORING_REGISTER_RESIZE_RINGS")
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 96189080
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -76,11 +76,15 @@ void io_eventfd_signal(struct io_ring_ctx *ctx, bool cqe_event)
{
	bool skip = false;
	struct io_ev_fd *ev_fd;

	if (READ_ONCE(ctx->rings->cq_flags) & IORING_CQ_EVENTFD_DISABLED)
		return;
	struct io_rings *rings;

	guard(rcu)();

	rings = rcu_dereference(ctx->rings_rcu);
	if (!rings)
		return;
	if (READ_ONCE(rings->cq_flags) & IORING_CQ_EVENTFD_DISABLED)
		return;
	ev_fd = rcu_dereference(ctx->io_ev_fd);
	/*
	 * Check again if ev_fd exists in case an io_eventfd_unregister call