Commit 09bd8442 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring/register: set ctx->restricted when restrictions are parsed



Rather than defer this until the rings are enabled, just set it
upfront when the restrictions are parsed and enabled anyway. There's
no reason to defer this setting until the rings are enabled.

Reviewed-by: default avatarGabriel Krisman Bertazi <krisman@suse.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent e6ed0f05
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -175,6 +175,8 @@ static __cold int io_register_restrictions(struct io_ring_ctx *ctx,
		memset(&ctx->restrictions, 0, sizeof(ctx->restrictions));
		return ret;
	}
	if (ctx->restrictions.registered)
		ctx->restricted = 1;
	return 0;
}

@@ -193,9 +195,6 @@ static int io_register_enable_rings(struct io_ring_ctx *ctx)
			io_activate_pollwq(ctx);
	}

	if (ctx->restrictions.registered)
		ctx->restricted = 1;

	/* Keep submitter_task store before clearing IORING_SETUP_R_DISABLED */
	smp_store_release(&ctx->flags, ctx->flags & ~IORING_SETUP_R_DISABLED);
	if (ctx->sq_data && wq_has_sleeper(&ctx->sq_data->wait))
@@ -627,7 +626,7 @@ static int __io_uring_register(struct io_ring_ctx *ctx, unsigned opcode,
	if (ctx->submitter_task && ctx->submitter_task != current)
		return -EEXIST;

	if (ctx->restricted) {
	if (ctx->restricted && !(ctx->flags & IORING_SETUP_R_DISABLED)) {
		opcode = array_index_nospec(opcode, IORING_REGISTER_LAST);
		if (!test_bit(opcode, ctx->restrictions.register_op))
			return -EACCES;