On Tue, Jul 07, 2026 at 07:33:16AM +0000, [email protected] wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) 
> to consider:
> - [Medium] The `sdt_might_sleep_end()` macro is bypassed when 
> `___wait_var_event` is interrupted, leaving the DEPT tracker in an 
> inconsistent state.
> - [Medium] The `sdt_might_sleep_end()` macro is bypassed when `___wait_event` 
> is interrupted, leaving the DEPT tracker in an inconsistent state.
> --
> 
> commit 0bd2d42866fa6b852ee5317edcaf6890a90c3c65
> Author: Byungchul Park <[email protected]>
> 
> dept: apply sdt_might_sleep_{start,end}() to hashed-waitqueue wait
> 
> Make dept able to track dependencies by hashed-waitqueue waits.
> 
> > diff --git a/include/linux/wait_bit.h b/include/linux/wait_bit.h
> > index 9e29d79fc790a..179a616ad245a 100644
> > --- a/include/linux/wait_bit.h
> > +++ b/include/linux/wait_bit.h
> [ ... ]
> > @@ -257,6 +258,7 @@ extern wait_queue_head_t *__var_waitqueue(void *p);
> >       struct wait_bit_queue_entry __wbq_entry;                        \
> >       long __ret = ret; /* explicit shadow */                         \
> >                                                                       \
> > +     sdt_might_sleep_start(NULL);                                    \
> >       init_wait_var_entry(&__wbq_entry, var,                          \
> >                           exclusive ? WQ_FLAG_EXCLUSIVE : 0);         \
> >       for (;;) {                                                      \
> > @@ -274,6 +276,7 @@ extern wait_queue_head_t *__var_waitqueue(void *p);
> >               cmd;                                                    \
> >       }                                                               \
> >       finish_wait(__wq_head, &__wbq_entry.wq_entry);                  \
> > +     sdt_might_sleep_end();                                          \
> >  __out:       __ret;                                                        
> >   \
> >  })
> 
> [Severity: Medium]
> If this wait is interrupted by a signal, the loop executes a goto __out
> which bypasses sdt_might_sleep_end(). Does this leave the dept tracker
> in an inconsistent state where the task's stage remains permanently armed?
> 
> This could cause false positive dependency tracking splats on subsequent
> waits, or fail to record new dependencies because the tracker is blinded by
> the stale stage.
> 
> I noticed the exact same issue is present in ___wait_event():
> 
> include/linux/wait.h:___wait_event() {
>     ...
>                 if (___wait_is_interruptible(state) && __int) {
>                         __ret = __int;
>                         goto __out;
>                 }
>     ...
>         sdt_might_sleep_end();
> __out:  __ret;
> })

I will fix it.

> [Severity: Medium]
> Does ___wait_event() also skip sdt_might_sleep_end() when interrupted?
> By missing the paired cleanup call, the task's stage could remain
> permanently armed here as well.
> 
> Would it make sense to move the __out label above sdt_might_sleep_end(),
> or otherwise ensure the state is cleaned up on the interrupted paths for
> both of these macros?

Right.  I will fix it.

        Byungchul

> --
> Sashiko AI review ยท 
> https://sashiko.dev/#/patchset/[email protected]?part=13

Reply via email to