diff options
| author | Kees Cook <keescook@chromium.org> | 2021-09-29 15:02:14 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2025-08-28 16:24:03 +0200 |
| commit | 5ce1264b586d53775f69769606e8c4afcbd7f85c (patch) | |
| tree | fa29dab4777aa1bb73c7498fda3244c1281da50d /arch/csky | |
| parent | b52e53a44a4320d357b7462d11a98cf1146c22c0 (diff) | |
| download | linux-5ce1264b586d53775f69769606e8c4afcbd7f85c.tar.gz linux-5ce1264b586d53775f69769606e8c4afcbd7f85c.tar.bz2 linux-5ce1264b586d53775f69769606e8c4afcbd7f85c.zip | |
sched: Add wrapper for get_wchan() to keep task blocked
commit 42a20f86dc19f9282d974df0ba4d226c865ab9dd upstream.
Having a stable wchan means the process must be blocked and for it to
stay that way while performing stack unwinding.
Suggested-by: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> [arm]
Tested-by: Mark Rutland <mark.rutland@arm.com> [arm64]
Link: https://lkml.kernel.org/r/20211008111626.332092234@infradead.org
Signed-off-by: Siddhi Katage <siddhi.katage@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch/csky')
| -rw-r--r-- | arch/csky/include/asm/processor.h | 2 | ||||
| -rw-r--r-- | arch/csky/kernel/stacktrace.c | 5 |
2 files changed, 3 insertions, 4 deletions
diff --git a/arch/csky/include/asm/processor.h b/arch/csky/include/asm/processor.h index 9e933021fe8e..817dd60ff152 100644 --- a/arch/csky/include/asm/processor.h +++ b/arch/csky/include/asm/processor.h @@ -81,7 +81,7 @@ static inline void release_thread(struct task_struct *dead_task) extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); -unsigned long get_wchan(struct task_struct *p); +unsigned long __get_wchan(struct task_struct *p); #define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc) #define KSTK_ESP(tsk) (task_pt_regs(tsk)->usp) diff --git a/arch/csky/kernel/stacktrace.c b/arch/csky/kernel/stacktrace.c index 1b280ef08004..9f78f5d21511 100644 --- a/arch/csky/kernel/stacktrace.c +++ b/arch/csky/kernel/stacktrace.c @@ -111,12 +111,11 @@ static bool save_wchan(unsigned long pc, void *arg) return false; } -unsigned long get_wchan(struct task_struct *task) +unsigned long __get_wchan(struct task_struct *task) { unsigned long pc = 0; - if (likely(task && task != current && !task_is_running(task))) - walk_stackframe(task, NULL, save_wchan, &pc); + walk_stackframe(task, NULL, save_wchan, &pc); return pc; } |
