* Re: io_uring: Fix exception handling in io_ring_ctx_alloc() [not found] ` <[email protected]> @ 2024-01-10 11:23 ` Markus Elfring 2024-01-10 16:55 ` [cocci] [PATCH] " Gabriel Krisman Bertazi 1 sibling, 0 replies; 12+ messages in thread From: Markus Elfring @ 2024-01-10 11:23 UTC (permalink / raw) To: kernel-janitors, io-uring, Hao Xu, Jens Axboe, Pavel Begunkov; +Cc: cocci, LKML > 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. > > 1. Thus use more appropriate labels instead. > > 2. Reorder jump targets at the end. > > 3. Omit the statement “kfree(ctx->io_bl);”. Is this patch still in review queues? See also: https://lore.kernel.org/cocci/[email protected]/ https://sympa.inria.fr/sympa/arc/cocci/2023-03/msg00114.html Regards, Markus ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [cocci] [PATCH] io_uring: Fix exception handling in io_ring_ctx_alloc() [not found] ` <[email protected]> 2024-01-10 11:23 ` io_uring: Fix exception handling in io_ring_ctx_alloc() Markus Elfring @ 2024-01-10 16:55 ` Gabriel Krisman Bertazi 2024-01-10 20:45 ` [PATCH v2 0/2] io_uring: Adjustments for io_ring_ctx_alloc() Markus Elfring 1 sibling, 1 reply; 12+ messages in thread From: Gabriel Krisman Bertazi @ 2024-01-10 16:55 UTC (permalink / raw) To: Markus Elfring Cc: kernel-janitors, io-uring, Hao Xu, Jens Axboe, Pavel Begunkov, cocci, LKML Markus Elfring <[email protected]> writes: > Date: Wed, 29 Mar 2023 17:35:16 +0200 > > 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. > > 1. Thus use more appropriate labels instead. > > 2. Reorder jump targets at the end. FWIW, I don't think it makes sense to have the extra labels or re-sort without a good reason. kfree works fine with the NULL pointers, so there is no bug to be fixed and moving code around for no reason just makes life painful for backporters. Also, the patch no longer applies. > 3. Omit the statement “kfree(ctx->io_bl);”. From a quick look, this might still make sense. can you confirm and make that change into a separate patch? -- Gabriel Krisman Bertazi ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 0/2] io_uring: Adjustments for io_ring_ctx_alloc() 2024-01-10 16:55 ` [cocci] [PATCH] " Gabriel Krisman Bertazi @ 2024-01-10 20:45 ` 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-10 20:50 ` [PATCH v2 2/2] io_uring: Improve exception handling " Markus Elfring 0 siblings, 2 replies; 12+ messages in thread From: Markus Elfring @ 2024-01-10 20:45 UTC (permalink / raw) To: io-uring, kernel-janitors, Gabriel Krisman Bertazi, Jens Axboe, Pavel Begunkov Cc: LKML From: Markus Elfring <[email protected]> Date: Wed, 10 Jan 2024 21:38:12 +0100 A few update suggestions were taken into account from static source code analysis. Markus Elfring (2): Delete a redundant kfree() call Improve exception handling io_uring/io_uring.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) -- 2.43.0 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 1/2] io_uring: Delete a redundant kfree() call in io_ring_ctx_alloc() 2024-01-10 20:45 ` [PATCH v2 0/2] io_uring: Adjustments for io_ring_ctx_alloc() Markus Elfring @ 2024-01-10 20:48 ` Markus Elfring 2024-01-12 14:25 ` Gabriel Krisman Bertazi 2024-01-10 20:50 ` [PATCH v2 2/2] io_uring: Improve exception handling " Markus Elfring 1 sibling, 1 reply; 12+ messages in thread From: Markus Elfring @ 2024-01-10 20:48 UTC (permalink / raw) To: io-uring, kernel-janitors, Gabriel Krisman Bertazi, Jens Axboe, Pavel Begunkov Cc: LKML From: Markus Elfring <[email protected]> Date: Wed, 10 Jan 2024 20:54:43 +0100 Another useful pointer was not reassigned to the data structure member “io_bl” by this function implementation. Thus omit a redundant call of the function “kfree” at the end. Signed-off-by: Markus Elfring <[email protected]> --- v2: A change request by Gabriel Krisman Bertazi was applied here. io_uring/io_uring.c | 1 - 1 file changed, 1 deletion(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 86761ec623f9..c9a63c39cdd0 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -344,7 +344,6 @@ static __cold struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p) err: kfree(ctx->cancel_table.hbs); kfree(ctx->cancel_table_locked.hbs); - kfree(ctx->io_bl); xa_destroy(&ctx->io_bl_xa); kfree(ctx); return NULL; -- 2.43.0 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2 1/2] io_uring: Delete a redundant kfree() call in io_ring_ctx_alloc() 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 0 siblings, 1 reply; 12+ messages in thread From: Gabriel Krisman Bertazi @ 2024-01-12 14:25 UTC (permalink / raw) To: Markus Elfring Cc: io-uring, kernel-janitors, Jens Axboe, Pavel Begunkov, LKML Markus Elfring <[email protected]> writes: > From: Markus Elfring <[email protected]> > Date: Wed, 10 Jan 2024 20:54:43 +0100 > > Another useful pointer was not reassigned to the data structure member > “io_bl” by this function implementation. > Thus omit a redundant call of the function “kfree” at the end. Perhaps rewrite this to: ctx->io_bl is initialized later through IORING_OP_PROVIDE_BUFFERS or IORING_REGISTER_PBUF_RING later on, so there is nothing to free in the ctx allocation error path. Other than that, and for this patch only: Reviewed-by: Gabriel Krisman Bertazi <[email protected]> thanks, > > Signed-off-by: Markus Elfring <[email protected]> > --- > > v2: > A change request by Gabriel Krisman Bertazi was applied here. > > > io_uring/io_uring.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c > index 86761ec623f9..c9a63c39cdd0 100644 > --- a/io_uring/io_uring.c > +++ b/io_uring/io_uring.c > @@ -344,7 +344,6 @@ static __cold struct io_ring_ctx *io_ring_ctx_alloc(struct io_uring_params *p) > err: > kfree(ctx->cancel_table.hbs); > kfree(ctx->cancel_table_locked.hbs); > - kfree(ctx->io_bl); > xa_destroy(&ctx->io_bl_xa); > kfree(ctx); > return NULL; > -- > 2.43.0 > -- Gabriel Krisman Bertazi ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 1/2] io_uring: Delete a redundant kfree() call in io_ring_ctx_alloc() 2024-01-12 14:25 ` Gabriel Krisman Bertazi @ 2024-01-12 16:18 ` Jens Axboe 2024-01-12 17:15 ` Gabriel Krisman Bertazi 0 siblings, 1 reply; 12+ messages in thread From: Jens Axboe @ 2024-01-12 16:18 UTC (permalink / raw) To: Gabriel Krisman Bertazi, Markus Elfring Cc: io-uring, kernel-janitors, Pavel Begunkov, LKML On 1/12/24 7:25 AM, Gabriel Krisman Bertazi wrote: > Markus Elfring <[email protected]> writes: > >> From: Markus Elfring <[email protected]> >> Date: Wed, 10 Jan 2024 20:54:43 +0100 >> >> Another useful pointer was not reassigned to the data structure member >> ?io_bl? by this function implementation. >> Thus omit a redundant call of the function ?kfree? at the end. This is just nonsense... On top of that, this patch is pointless, and the 2nd patch is even worse in that it just makes a mess of cleanup. And for what reasoning? Absolutely none. There's a reason why I filter emails from this particular author straight to the trash, there's a long history of this kind of thing and not understanding feedback. -- Jens Axboe ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 1/2] io_uring: Delete a redundant kfree() call in io_ring_ctx_alloc() 2024-01-12 16:18 ` Jens Axboe @ 2024-01-12 17:15 ` Gabriel Krisman Bertazi 2024-01-12 17:50 ` [v2 " Markus Elfring 0 siblings, 1 reply; 12+ messages in thread From: Gabriel Krisman Bertazi @ 2024-01-12 17:15 UTC (permalink / raw) To: Jens Axboe Cc: Markus Elfring, io-uring, kernel-janitors, Pavel Begunkov, LKML Jens Axboe <[email protected]> writes: > On 1/12/24 7:25 AM, Gabriel Krisman Bertazi wrote: >> Markus Elfring <[email protected]> writes: >> >>> From: Markus Elfring <[email protected]> >>> Date: Wed, 10 Jan 2024 20:54:43 +0100 >>> >>> Another useful pointer was not reassigned to the data structure member >>> ?io_bl? by this function implementation. >>> Thus omit a redundant call of the function ?kfree? at the end. > > This is just nonsense... > > On top of that, this patch is pointless, and the 2nd patch is even worse > in that it just makes a mess of cleanup. And for what reasoning? > Absolutely none. Ah, The description is non-sense, but the change in this patch seemed correct to me, even if pointless, which is why I reviewed it. patch 2 is just garbage. > There's a reason why I filter emails from this particular author > straight to the trash, there's a long history of this kind of thing and > not understanding feedback. Clearly there is background with this author that I wasn't aware, and just based on his responses, I can see your point. So I apologize for giving him space to continue the spamming. My bad. -- Gabriel Krisman Bertazi ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [v2 1/2] io_uring: Delete a redundant kfree() call in io_ring_ctx_alloc() 2024-01-12 17:15 ` Gabriel Krisman Bertazi @ 2024-01-12 17:50 ` Markus Elfring 0 siblings, 0 replies; 12+ messages in thread From: Markus Elfring @ 2024-01-12 17:50 UTC (permalink / raw) To: Gabriel Krisman Bertazi, Jens Axboe, Pavel Begunkov, io-uring, kernel-janitors Cc: LKML > patch 2 is just garbage. Such a view can eventually be reconsidered if the support would ever grow also for the application of additional labels. 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 > Clearly there is background with this author that I wasn't aware, and > just based on his responses, I can see your point. So I apologize for > giving him space to continue the spamming. The change reluctance can be adapted according to the spectrum of presented source code adjustment possibilities, can't it? Regards, Markus ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 2/2] io_uring: Improve exception handling in io_ring_ctx_alloc() 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-10 20:50 ` Markus Elfring 2024-01-11 13:23 ` Pavel Begunkov 2024-01-12 14:30 ` Gabriel Krisman Bertazi 1 sibling, 2 replies; 12+ messages in thread From: Markus Elfring @ 2024-01-10 20:50 UTC (permalink / raw) To: io-uring, kernel-janitors, Gabriel Krisman Bertazi, Jens Axboe, Pavel Begunkov Cc: LKML From: Markus Elfring <[email protected]> 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. 1. Thus use more appropriate labels instead. 2. Reorder jump targets at the end. Signed-off-by: Markus Elfring <[email protected]> --- 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 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] io_uring: Improve exception handling in io_ring_ctx_alloc() 2024-01-10 20:50 ` [PATCH v2 2/2] io_uring: Improve exception handling " Markus Elfring @ 2024-01-11 13:23 ` Pavel Begunkov 2024-01-12 14:30 ` Gabriel Krisman Bertazi 1 sibling, 0 replies; 12+ messages in thread From: Pavel Begunkov @ 2024-01-11 13:23 UTC (permalink / raw) To: Markus Elfring, io-uring, kernel-janitors, Gabriel Krisman Bertazi, Jens Axboe Cc: LKML On 1/10/24 20:50, Markus Elfring wrote: > From: Markus Elfring <[email protected]> > 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 <[email protected]> > --- > > 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 ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 2/2] io_uring: Improve exception handling in io_ring_ctx_alloc() 2024-01-10 20:50 ` [PATCH v2 2/2] io_uring: Improve exception handling " Markus Elfring 2024-01-11 13:23 ` Pavel Begunkov @ 2024-01-12 14:30 ` Gabriel Krisman Bertazi 2024-01-12 15:00 ` [v2 " Markus Elfring 1 sibling, 1 reply; 12+ messages in thread From: Gabriel Krisman Bertazi @ 2024-01-12 14:30 UTC (permalink / raw) To: Markus Elfring Cc: io-uring, kernel-janitors, Jens Axboe, Pavel Begunkov, LKML Markus Elfring <[email protected]> writes: > From: Markus Elfring <[email protected]> > 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. > > 1. Thus use more appropriate labels instead. > > 2. Reorder jump targets at the end. > As I mentioned on v1, this doesn't do us any good, as kfree can handle NULL pointers just fine, and changes like this becomes churn later when backporting or modifying the code. -- Gabriel Krisman Bertazi ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [v2 2/2] io_uring: Improve exception handling in io_ring_ctx_alloc() 2024-01-12 14:30 ` Gabriel Krisman Bertazi @ 2024-01-12 15:00 ` Markus Elfring 0 siblings, 0 replies; 12+ messages in thread From: Markus Elfring @ 2024-01-12 15:00 UTC (permalink / raw) To: Gabriel Krisman Bertazi, Jens Axboe, Pavel Begunkov, io-uring, kernel-janitors Cc: LKML >> 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. >> >> 1. Thus use more appropriate labels instead. >> >> 2. Reorder jump targets at the end. >> > > As I mentioned on v1, this doesn't do us any good, I dare to present other development views. > as kfree can handle NULL pointers just fine, Yes, this is the case. Would you dare to categorise such a special function calls as redundant? May it be skipped in more cases? > and changes like this becomes churn later when backporting or modifying the code. There are usual opportunities to consider for further collateral evolution. Regards, Markus ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2024-01-12 17:51 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <[email protected]> [not found] ` <[email protected]> 2024-01-10 11:23 ` io_uring: Fix exception handling in io_ring_ctx_alloc() 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 2024-01-12 14:30 ` Gabriel Krisman Bertazi 2024-01-12 15:00 ` [v2 " Markus Elfring
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox