From: Pavel Begunkov <asml.silence@gmail.com>
To: Markus Elfring <Markus.Elfring@web.de>,
io-uring@vger.kernel.org, kernel-janitors@vger.kernel.org,
Gabriel Krisman Bertazi <krisman@suse.de>,
Jens Axboe <axboe@kernel.dk>
Cc: LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 2/2] io_uring: Improve exception handling in io_ring_ctx_alloc()
Date: Thu, 11 Jan 2024 13:23:31 +0000 [thread overview]
Message-ID: <4b1deeeb-b5fd-481d-99b5-7d29c0edce2d@gmail.com> (raw)
In-Reply-To: <49ecda98-770d-455e-acd7-12d810280fdd@web.de>
On 1/10/24 20:50, Markus Elfring wrote:
> From: Markus Elfring <elfring@users.sourceforge.net>
> Date: Wed, 10 Jan 2024 21:15:48 +0100
>
> The label “err” was used to jump to a kfree() call despite of
> the detail in the implementation of the function “io_ring_ctx_alloc”
> that it was determined already that a corresponding variable contained
> a null pointer because of a failed memory allocation.
It's _much_ simpler the way it currently is, compare it with maintaining
a bunch of labels. That is the advantage of being able to distinguish
un-allocated state like NULL, just kfree them and don't care about
jumping to a wrong one or keeping them in order.
> 1. Thus use more appropriate labels instead.
>
> 2. Reorder jump targets at the end.
>
> Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
> ---
>
> See also:
> https://wiki.sei.cmu.edu/confluence/display/c/MEM12-C.+Consider+using+a+goto+chain+when+leaving+a+function+on+error+when+using+and+releasing+resources
>
>
> io_uring/io_uring.c | 15 ++++++++++-----
> 1 file changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c
> index c9a63c39cdd0..7727cdd505ae 100644
> --- a/io_uring/io_uring.c
> +++ b/io_uring/io_uring.c
> @@ -295,12 +295,14 @@ static __cold struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
> hash_bits = ilog2(p->cq_entries) - 5;
> hash_bits = clamp(hash_bits, 1, 8);
> if (io_alloc_hash_table(&ctx->cancel_table, hash_bits))
> - goto err;
> + goto destroy_io_bl_xa;
> +
> if (io_alloc_hash_table(&ctx->cancel_table_locked, hash_bits))
> - goto err;
> + goto free_cancel_table_hbs;
> +
> if (percpu_ref_init(&ctx->refs, io_ring_ctx_ref_free,
> 0, GFP_KERNEL))
> - goto err;
> + goto free_cancel_table_locked_hbs;
>
> ctx->flags = p->flags;
> init_waitqueue_head(&ctx->sqo_sq_wait);
> @@ -341,9 +343,12 @@ static __cold struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p)
> INIT_WQ_LIST(&ctx->submit_state.compl_reqs);
> INIT_HLIST_HEAD(&ctx->cancelable_uring_cmd);
> return ctx;
> -err:
> - kfree(ctx->cancel_table.hbs);
> +
> +free_cancel_table_locked_hbs:
> kfree(ctx->cancel_table_locked.hbs);
> +free_cancel_table_hbs:
> + kfree(ctx->cancel_table.hbs);
> +destroy_io_bl_xa:
> xa_destroy(&ctx->io_bl_xa);
> kfree(ctx);
> return NULL;
> --
> 2.43.0
>
--
Pavel Begunkov
next prev parent reply other threads:[~2024-01-11 13:33 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-28 15:55 [cocci] Reconsidering kfree() calls for null pointers (with SmPL) Markus Elfring
2023-03-28 16:05 ` Vlastimil Babka
2023-03-29 6:18 ` Markus Elfring
2023-03-29 7:25 ` Vlastimil Babka
2023-03-28 17:13 ` [cocci] [PATCH 0/2] ARM: Adjustments for init_atags_procfs() Markus Elfring
2023-03-28 17:13 ` Markus Elfring
2023-03-28 17:15 ` [cocci] [PATCH 1/2] ARM: Delete an error message for a failed memory allocation in init_atags_procfs() Markus Elfring
2023-03-28 17:15 ` Markus Elfring
2023-03-28 17:17 ` [cocci] [PATCH 2/2] ARM: Return directly after a failed kmalloc() " Markus Elfring
2023-03-28 17:17 ` Markus Elfring
2024-01-10 11:48 ` [cocci] [PATCH 0/2] ARM: Adjustments for init_atags_procfs() Markus Elfring
2024-01-10 11:48 ` Markus Elfring
2024-01-10 11:48 ` Markus Elfring
2024-01-10 11:52 ` [cocci] [0/2] " Markus Elfring
2024-01-10 11:52 ` Markus Elfring
2024-01-10 11:52 ` Markus Elfring
2024-01-10 12:24 ` Russell King (Oracle)
2024-01-10 12:24 ` Russell King (Oracle)
2024-01-10 12:44 ` [cocci] " Markus Elfring
2024-01-10 12:44 ` Markus Elfring
2024-01-10 12:44 ` Markus Elfring
2024-01-10 12:47 ` Russell King (Oracle)
2024-01-10 12:47 ` Russell King (Oracle)
2024-01-10 12:52 ` [cocci] " Markus Elfring
2024-01-10 12:52 ` Markus Elfring
2024-01-10 12:52 ` Markus Elfring
2024-01-10 13:50 ` Russell King (Oracle)
2024-01-10 13:50 ` Russell King (Oracle)
2024-01-10 14:00 ` [cocci] " Markus Elfring
2024-01-10 14:00 ` Markus Elfring
2024-01-10 14:00 ` Markus Elfring
2024-01-10 14:07 ` Russell King (Oracle)
2024-01-10 14:07 ` Russell King (Oracle)
2024-01-10 13:34 ` Christian Heusel
2024-01-10 13:34 ` Christian Heusel
2024-01-10 13:46 ` [cocci] " Markus Elfring
2024-01-10 13:46 ` Markus Elfring
2024-01-10 13:46 ` Markus Elfring
2023-03-28 18:45 ` [cocci] [PATCH 0/2] perf/x86/intel/pt: Adjustments for pt_pmu_hw_init() Markus Elfring
2023-03-28 18:50 ` [cocci] [PATCH 1/2] perf/x86/intel/pt: Use -ENOMEM directly for a return statement in pt_pmu_hw_init() Markus Elfring
2023-03-28 18:52 ` [cocci] [PATCH 2/2] perf/x86/intel/pt: Return directly after a failed kzalloc() " Markus Elfring
2024-01-10 11:45 ` [cocci] [PATCH 0/2] perf/x86/intel/pt: Adjustments for pt_pmu_hw_init() Markus Elfring
2024-01-10 11:45 ` Markus Elfring
2023-03-29 10:12 ` [cocci] [PATCH] apparmor: Return directly after a failed kzalloc() in two functions Markus Elfring
2023-04-09 23:15 ` John Johansen
2023-03-29 13:36 ` [cocci] [PATCH 0/3] lru_cache: Adjustments for lc_create() Markus Elfring
2023-03-29 13:36 ` [Drbd-dev] " Markus Elfring
2023-03-29 13:40 ` [cocci] [PATCH 1/3] lru_cache: Return directly after a failed kzalloc() in lc_create() Markus Elfring
2023-03-29 13:40 ` [Drbd-dev] " Markus Elfring
2023-03-29 13:42 ` [cocci] [PATCH 2/3] lru_cache: Improve two size determinations " Markus Elfring
2023-03-29 13:42 ` [Drbd-dev] " Markus Elfring
2023-03-29 13:44 ` [cocci] [PATCH 3/3] lru_cache: Improve exception handling " Markus Elfring
2023-03-29 13:44 ` [Drbd-dev] " Markus Elfring
2024-01-10 11:40 ` [cocci] [PATCH 0/3] lru_cache: Adjustments for lc_create() Markus Elfring
2024-01-10 11:40 ` [Drbd-dev] " Markus Elfring
2024-01-10 11:40 ` Markus Elfring
2023-03-29 15:46 ` [cocci] [PATCH] io_uring: Fix exception handling in io_ring_ctx_alloc() Markus Elfring
2024-01-10 11:23 ` [cocci] " Markus Elfring
2024-01-10 11:23 ` Markus Elfring
2024-01-10 16:55 ` [cocci] [PATCH] " Gabriel Krisman Bertazi
2024-01-10 20:45 ` [PATCH v2 0/2] io_uring: Adjustments for io_ring_ctx_alloc() Markus Elfring
2024-01-10 20:48 ` [PATCH v2 1/2] io_uring: Delete a redundant kfree() call in io_ring_ctx_alloc() Markus Elfring
2024-01-12 14:25 ` Gabriel Krisman Bertazi
2024-01-12 16:18 ` Jens Axboe
2024-01-12 17:15 ` Gabriel Krisman Bertazi
2024-01-12 17:50 ` [v2 " Markus Elfring
2024-01-10 20:50 ` [PATCH v2 2/2] io_uring: Improve exception handling " Markus Elfring
2024-01-11 13:23 ` Pavel Begunkov [this message]
2024-01-12 14:30 ` Gabriel Krisman Bertazi
2024-01-12 15:00 ` [v2 " Markus Elfring
2023-03-30 8:50 ` [cocci] [PATCH 0/4] overlayfs: Adjustments for ovl_fill_super() Markus Elfring
2023-03-30 8:55 ` [cocci] [PATCH 1/4] overlayfs: Return directly for two checks in ovl_fill_super() Markus Elfring
2023-03-30 8:57 ` [cocci] [PATCH 2/4] overlayfs: Improve two size determinations " Markus Elfring
2023-03-30 9:00 ` [cocci] [PATCH 3/4] overlayfs: Improve exception handling " Markus Elfring
2023-03-30 9:02 ` [cocci] [PATCH 4/4] overlayfs: Move some assignments for the variable “err” " Markus Elfring
2024-01-10 12:24 ` [cocci] [PATCH 0/4] overlayfs: Adjustments for ovl_fill_super() Markus Elfring
2024-01-10 12:24 ` Markus Elfring
2024-01-10 12:49 ` Amir Goldstein
2024-01-10 13:01 ` [cocci] [0/4] " Markus Elfring
2024-01-10 13:01 ` Markus Elfring
2024-01-10 13:19 ` Amir Goldstein
2024-01-10 13:33 ` [cocci] " Markus Elfring
2024-01-10 13:33 ` Markus Elfring
2024-01-10 13:45 ` Amir Goldstein
2023-03-30 16:18 ` [cocci] [PATCH] squashfs: Improve exception handling in squashfs_decompressor_create() Markus Elfring
2024-01-05 20:32 ` Markus Elfring
2024-01-05 20:32 ` Markus Elfring
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4b1deeeb-b5fd-481d-99b5-7d29c0edce2d@gmail.com \
--to=asml.silence@gmail.com \
--cc=Markus.Elfring@web.de \
--cc=axboe@kernel.dk \
--cc=io-uring@vger.kernel.org \
--cc=kernel-janitors@vger.kernel.org \
--cc=krisman@suse.de \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.