Thank you for your contribution! Sashiko AI review found 3 potential issue(s) 
to consider:
- [Medium] DEPT fails to stop when lock debugging is globally disabled via 
kernel tainting.
- [Low] dept_stop_emerg() is unnecessarily exported via EXPORT_SYMBOL_GPL 
despite having no module callers.
- [Low] Implicit reliance on transitive header inclusion for dept_stop_emerg().
--

commit 3772379470ad3a639343d641bfb17cbd105fc9a5
Author: Byungchul Park <[email protected]>

dept: make dept stop from working on debug_locks_off()

The commit adds a dept_stop_emerg() call inside debug_locks_off() to
stop the DEPT feature when panic or other lock debugging suspensions occur.

> diff --git a/kernel/dependency/dept.c b/kernel/dependency/dept.c
> index 048348ea64d29..007e1bc7d201e 100644
> --- a/kernel/dependency/dept.c
> +++ b/kernel/dependency/dept.c

[ ... ]

> @@ -187,6 +187,12 @@ static void dept_unlock(void)
>       arch_spin_unlock(&dept_spin);
>  }
>  
> +void dept_stop_emerg(void)
> +{
> +     WRITE_ONCE(dept_stop, 1);
> +}
> +EXPORT_SYMBOL_GPL(dept_stop_emerg);

[Severity: Low]
Does this function need to be exported to loadable modules?

CONFIG_DEPT is a boolean configuration, so kernel/dependency/dept.c is
always built-in. Its only caller in lib/debug_locks.c is also always
built-in, making this export unnecessary.

> +
>  enum bfs_ret {
>       BFS_CONTINUE,
>       BFS_DONE,
> diff --git a/lib/debug_locks.c b/lib/debug_locks.c
> index a75ee30b77cb8..14a965914a8fb 100644
> --- a/lib/debug_locks.c
> +++ b/lib/debug_locks.c

[ ... ]

> @@ -38,6 +38,8 @@ EXPORT_SYMBOL_GPL(debug_locks_silent);
>   */
>  int debug_locks_off(void)
>  {
> +     dept_stop_emerg();

[Severity: Low]
Is it possible to explicitly include <linux/dept.h> in lib/debug_locks.c?

Relying on implicit transitive header inclusion for dept_stop_emerg()
could break the build if inner header structures like spinlock.h or
lockdep.h change in the future.

> +
>       if (debug_locks && __debug_locks_off()) {

[Severity: Medium]
Will this miss DEPT shutdown when the system is tainted?

For example, when a system fault occurs, add_taint() disables lockdep via
__debug_locks_off():

kernel/panic.c:add_taint() {
    ...
    if (lockdep_ok == LOCKDEP_NOW_UNRELIABLE && __debug_locks_off())
        pr_warn("Disabling lock debugging due to kernel taint\n");
    ...
}

Because this bypasses debug_locks_off(), DEPT remains enabled when the
system lock state is already unreliable, potentially leading to false
positive dependency splats or further crashes.

>               if (!debug_locks_silent) {
>                       console_verbose();
>                       return 1;
>               }
>       }
>       return 0;
>  }

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

Reply via email to