* [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() @ 2026-05-08 17:38 ` Sang-Heon Jeon 2026-05-09 6:41 ` Onur Özkan 2026-05-09 8:08 ` Andreas Hindborg 0 siblings, 2 replies; 7+ messages in thread From: Sang-Heon Jeon @ 2026-05-08 17:38 UTC (permalink / raw) To: a.hindborg, boqun, fujita.tomonori, frederic, lyude, tglx, anna-maria, jstultz, sboyd Cc: rust-for-linux, Sang-Heon Jeon fsleep() documents out-of-range input as a bug but does not check it, unlike udelay(). Add `debug_assert!` calls to catch it in debug builds. Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> --- Hello, I found this small inconsistency while reading the code. The same check was applied to udelay() [1] but does not seem to have been extended to fsleep(). Please let me know if I have misunderstood anything. [1] https://lore.kernel.org/all/20251103112958.2961517-2-fujita.tomonori@gmail.com Best Regards, Sang-Heon Jeon --- rust/kernel/time/delay.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rust/kernel/time/delay.rs b/rust/kernel/time/delay.rs index b5b1b42797a0..1e699fe647ff 100644 --- a/rust/kernel/time/delay.rs +++ b/rust/kernel/time/delay.rs @@ -32,6 +32,9 @@ pub fn fsleep(delta: Delta) { // overflow inside fsleep, which could lead to unintentional infinite sleep. const MAX_DELTA: Delta = Delta::from_micros(i32::MAX as i64); + debug_assert!(delta.as_nanos() >= 0); + debug_assert!(delta <= MAX_DELTA); + let delta = if (Delta::ZERO..=MAX_DELTA).contains(&delta) { delta } else { -- 2.43.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() 2026-05-08 17:38 ` [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() Sang-Heon Jeon @ 2026-05-09 6:41 ` Onur Özkan 2026-05-09 8:08 ` Andreas Hindborg 1 sibling, 0 replies; 7+ messages in thread From: Onur Özkan @ 2026-05-09 6:41 UTC (permalink / raw) To: Sang-Heon Jeon Cc: a.hindborg, boqun, fujita.tomonori, frederic, lyude, tglx, anna-maria, jstultz, sboyd, rust-for-linux, Onur Özkan On Sat, 09 May 2026 02:38:27 +0900 Sang-Heon Jeon <ekffu200098@gmail.com> wrote: > fsleep() documents out-of-range input as a bug but does not check > it, unlike udelay(). Add `debug_assert!` calls to catch it in > debug builds. > > Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> > --- > Hello, > > I found this small inconsistency while reading the code. The same > check was applied to udelay() [1] but does not seem to have been > extended to fsleep(). Please let me know if I have misunderstood > anything. > > [1] https://lore.kernel.org/all/20251103112958.2961517-2-fujita.tomonori@gmail.com > > Best Regards, > Sang-Heon Jeon > --- > rust/kernel/time/delay.rs | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/rust/kernel/time/delay.rs b/rust/kernel/time/delay.rs > index b5b1b42797a0..1e699fe647ff 100644 > --- a/rust/kernel/time/delay.rs > +++ b/rust/kernel/time/delay.rs > @@ -32,6 +32,9 @@ pub fn fsleep(delta: Delta) { > // overflow inside fsleep, which could lead to unintentional infinite sleep. > const MAX_DELTA: Delta = Delta::from_micros(i32::MAX as i64); > > + debug_assert!(delta.as_nanos() >= 0); > + debug_assert!(delta <= MAX_DELTA); > + > let delta = if (Delta::ZERO..=MAX_DELTA).contains(&delta) { > delta > } else { > -- > 2.43.0 > Reviewed-by: Onur Özkan <work@onurozkan.dev> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() 2026-05-08 17:38 ` [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() Sang-Heon Jeon 2026-05-09 6:41 ` Onur Özkan @ 2026-05-09 8:08 ` Andreas Hindborg 2026-05-09 12:10 ` Gary Guo 1 sibling, 1 reply; 7+ messages in thread From: Andreas Hindborg @ 2026-05-09 8:08 UTC (permalink / raw) To: Sang-Heon Jeon, boqun, fujita.tomonori, frederic, lyude, tglx, anna-maria, jstultz, sboyd Cc: rust-for-linux, Sang-Heon Jeon "Sang-Heon Jeon" <ekffu200098@gmail.com> writes: > fsleep() documents out-of-range input as a bug but does not check > it, unlike udelay(). Add `debug_assert!` calls to catch it in > debug builds. > > Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> > --- > Hello, > > I found this small inconsistency while reading the code. The same > check was applied to udelay() [1] but does not seem to have been > extended to fsleep(). Please let me know if I have misunderstood > anything. > > [1] https://lore.kernel.org/all/20251103112958.2961517-2-fujita.tomonori@gmail.com > > Best Regards, > Sang-Heon Jeon Looks good to me. Could you add the warn_once and remove the todo as well? And add the warn_once to udelay as well, so both functions have same shape. Thanks, Andreas ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() 2026-05-09 8:08 ` Andreas Hindborg @ 2026-05-09 12:10 ` Gary Guo 2026-05-09 14:36 ` Andreas Hindborg 0 siblings, 1 reply; 7+ messages in thread From: Gary Guo @ 2026-05-09 12:10 UTC (permalink / raw) To: Andreas Hindborg, Sang-Heon Jeon, boqun, fujita.tomonori, frederic, lyude, tglx, anna-maria, jstultz, sboyd Cc: rust-for-linux On Sat May 9, 2026 at 9:08 AM BST, Andreas Hindborg wrote: > "Sang-Heon Jeon" <ekffu200098@gmail.com> writes: > >> fsleep() documents out-of-range input as a bug but does not check >> it, unlike udelay(). Add `debug_assert!` calls to catch it in >> debug builds. >> >> Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> >> --- >> Hello, >> >> I found this small inconsistency while reading the code. The same >> check was applied to udelay() [1] but does not seem to have been >> extended to fsleep(). Please let me know if I have misunderstood >> anything. >> >> [1] https://lore.kernel.org/all/20251103112958.2961517-2-fujita.tomonori@gmail.com >> >> Best Regards, >> Sang-Heon Jeon > > Looks good to me. Could you add the warn_once and remove the todo as > well? And add the warn_once to udelay as well, so both functions have > same shape. If `warn_once` is added then the debug assert would be unnecessary. Best, Gary ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() 2026-05-09 12:10 ` Gary Guo @ 2026-05-09 14:36 ` Andreas Hindborg 2026-05-09 14:50 ` Gary Guo 0 siblings, 1 reply; 7+ messages in thread From: Andreas Hindborg @ 2026-05-09 14:36 UTC (permalink / raw) To: Gary Guo, Sang-Heon Jeon, boqun, fujita.tomonori, frederic, lyude, tglx, anna-maria, jstultz, sboyd Cc: rust-for-linux "Gary Guo" <gary@garyguo.net> writes: > On Sat May 9, 2026 at 9:08 AM BST, Andreas Hindborg wrote: >> "Sang-Heon Jeon" <ekffu200098@gmail.com> writes: >> >>> fsleep() documents out-of-range input as a bug but does not check >>> it, unlike udelay(). Add `debug_assert!` calls to catch it in >>> debug builds. >>> >>> Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> >>> --- >>> Hello, >>> >>> I found this small inconsistency while reading the code. The same >>> check was applied to udelay() [1] but does not seem to have been >>> extended to fsleep(). Please let me know if I have misunderstood >>> anything. >>> >>> [1] https://lore.kernel.org/all/20251103112958.2961517-2-fujita.tomonori@gmail.com >>> >>> Best Regards, >>> Sang-Heon Jeon >> >> Looks good to me. Could you add the warn_once and remove the todo as >> well? And add the warn_once to udelay as well, so both functions have >> same shape. > > If `warn_once` is added then the debug assert would be unnecessary. It is different mechanisms in different situations, right? `pr_warn_once` prints a warning once (and a stack trace depending on kernel configuration?). It would be enabled in production environments, and it allows the thread to continue executing after triggering. `debug_assert` panics when debug assertions are enabled, otherwise is compiled out. I don't think one makes the other unnecessary. Best regards, Andreas Hindborg ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() 2026-05-09 14:36 ` Andreas Hindborg @ 2026-05-09 14:50 ` Gary Guo 2026-05-09 17:44 ` Andreas Hindborg 0 siblings, 1 reply; 7+ messages in thread From: Gary Guo @ 2026-05-09 14:50 UTC (permalink / raw) To: Andreas Hindborg, Gary Guo, Sang-Heon Jeon, boqun, fujita.tomonori, frederic, lyude, tglx, anna-maria, jstultz, sboyd Cc: rust-for-linux On Sat May 9, 2026 at 3:36 PM BST, Andreas Hindborg wrote: > "Gary Guo" <gary@garyguo.net> writes: > >> On Sat May 9, 2026 at 9:08 AM BST, Andreas Hindborg wrote: >>> "Sang-Heon Jeon" <ekffu200098@gmail.com> writes: >>> >>>> fsleep() documents out-of-range input as a bug but does not check >>>> it, unlike udelay(). Add `debug_assert!` calls to catch it in >>>> debug builds. >>>> >>>> Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> >>>> --- >>>> Hello, >>>> >>>> I found this small inconsistency while reading the code. The same >>>> check was applied to udelay() [1] but does not seem to have been >>>> extended to fsleep(). Please let me know if I have misunderstood >>>> anything. >>>> >>>> [1] https://lore.kernel.org/all/20251103112958.2961517-2-fujita.tomonori@gmail.com >>>> >>>> Best Regards, >>>> Sang-Heon Jeon >>> >>> Looks good to me. Could you add the warn_once and remove the todo as >>> well? And add the warn_once to udelay as well, so both functions have >>> same shape. >> >> If `warn_once` is added then the debug assert would be unnecessary. > > It is different mechanisms in different situations, right? > `pr_warn_once` prints a warning once (and a stack trace depending on > kernel configuration?). It would be enabled in production environments, > and it allows the thread to continue executing after triggering. The existing comment and your message says `warn_once`, not `pr_warn_once`. > > `debug_assert` panics when debug assertions are enabled, otherwise is > compiled out. > > I don't think one makes the other unnecessary. I don't think there should be two checks of the same thing. Even if we want different behaviour depending on if debug assertions are enabled or not, it should be a single macro that switches behaviour based on that config. Best, Gary ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() 2026-05-09 14:50 ` Gary Guo @ 2026-05-09 17:44 ` Andreas Hindborg 0 siblings, 0 replies; 7+ messages in thread From: Andreas Hindborg @ 2026-05-09 17:44 UTC (permalink / raw) To: Gary Guo, Gary Guo, Sang-Heon Jeon, boqun, fujita.tomonori, frederic, lyude, tglx, anna-maria, jstultz, sboyd Cc: rust-for-linux "Gary Guo" <gary@garyguo.net> writes: > On Sat May 9, 2026 at 3:36 PM BST, Andreas Hindborg wrote: >> "Gary Guo" <gary@garyguo.net> writes: >> >>> On Sat May 9, 2026 at 9:08 AM BST, Andreas Hindborg wrote: >>>> "Sang-Heon Jeon" <ekffu200098@gmail.com> writes: >>>> >>>>> fsleep() documents out-of-range input as a bug but does not check >>>>> it, unlike udelay(). Add `debug_assert!` calls to catch it in >>>>> debug builds. >>>>> >>>>> Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> >>>>> --- >>>>> Hello, >>>>> >>>>> I found this small inconsistency while reading the code. The same >>>>> check was applied to udelay() [1] but does not seem to have been >>>>> extended to fsleep(). Please let me know if I have misunderstood >>>>> anything. >>>>> >>>>> [1] https://lore.kernel.org/all/20251103112958.2961517-2-fujita.tomonori@gmail.com >>>>> >>>>> Best Regards, >>>>> Sang-Heon Jeon >>>> >>>> Looks good to me. Could you add the warn_once and remove the todo as >>>> well? And add the warn_once to udelay as well, so both functions have >>>> same shape. >>> >>> If `warn_once` is added then the debug assert would be unnecessary. >> >> It is different mechanisms in different situations, right? >> `pr_warn_once` prints a warning once (and a stack trace depending on >> kernel configuration?). It would be enabled in production environments, >> and it allows the thread to continue executing after triggering. > > The existing comment and your message says `warn_once`, not `pr_warn_once`. I actually mixed these up, thanks for pointing that out. We do not have `warn_once!` yet. > >> >> `debug_assert` panics when debug assertions are enabled, otherwise is >> compiled out. >> >> I don't think one makes the other unnecessary. > > I don't think there should be two checks of the same thing. Even if we want > different behaviour depending on if debug assertions are enabled or not, it > should be a single macro that switches behaviour based on that config. Apparently this was discussed in start of April [1] (I somehow missed it), and as far as I can tell, consensus is that we do not use `WARN_ONCE`. Instead we use `debug_assert` with `pr_warn_once`. That sounds reasonable to me. This can be a combined macro or open coded, either way is fine with me. I think we should add the `debug_assert` as suggested by this patch, add the `pr_warn_once` in the not taken branch, and remove the TODO about `WARN_ONCE`. We can bike-shed a combined macro on the side. Sounds reasonable @Gary? Best regards, Andreas Hindborg [1] https://lore.kernel.org/r/20260226120848.82891-5-adarshdas950@gmail.com ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-05-09 17:44 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <qBPUAToMpl5CvVd22lUrJOgsVSuqVYKsjEHpbs1UK-VTO-vN8UFOa35fFMsYOHoBuUp9HcP65ljAxmLQMcGS9w==@protonmail.internalid>
2026-05-08 17:38 ` [PATCH] rust: time: add debug assertions for out-of-range input in fsleep() Sang-Heon Jeon
2026-05-09 6:41 ` Onur Özkan
2026-05-09 8:08 ` Andreas Hindborg
2026-05-09 12:10 ` Gary Guo
2026-05-09 14:36 ` Andreas Hindborg
2026-05-09 14:50 ` Gary Guo
2026-05-09 17:44 ` Andreas Hindborg
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox