Commit f74441e6 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring: account locked memory before potential error case



The tear down path will always unaccount the memory, so ensure that we
have accounted it before hitting any of them.

Reported-by: default avatarTomáš Chaloupka <chalucha@gmail.com>
Reviewed-by: default avatarStefano Garzarella <sgarzare@redhat.com>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent bd740481
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -8341,6 +8341,16 @@ static int io_uring_create(unsigned entries, struct io_uring_params *p,
	ctx->user = user;
	ctx->creds = get_current_cred();

	/*
	 * Account memory _before_ installing the file descriptor. Once
	 * the descriptor is installed, it can get closed at any time. Also
	 * do this before hitting the general error path, as ring freeing
	 * will un-account as well.
	 */
	io_account_mem(ctx, ring_pages(p->sq_entries, p->cq_entries),
		       ACCT_LOCKED);
	ctx->limit_mem = limit_mem;

	ret = io_allocate_scq_urings(ctx, p);
	if (ret)
		goto err;
@@ -8377,14 +8387,6 @@ static int io_uring_create(unsigned entries, struct io_uring_params *p,
		goto err;
	}

	/*
	 * Account memory _before_ installing the file descriptor. Once
	 * the descriptor is installed, it can get closed at any time.
	 */
	io_account_mem(ctx, ring_pages(p->sq_entries, p->cq_entries),
		       ACCT_LOCKED);
	ctx->limit_mem = limit_mem;

	/*
	 * Install ring fd as the very last thing, so we don't risk someone
	 * having closed it before we finish setup