Patch "powerpc/stacktrace: Fix arch_stack_walk_reliable()" has been added to the 6.5-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    powerpc/stacktrace: Fix arch_stack_walk_reliable()

to the 6.5-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-stacktrace-fix-arch_stack_walk_reliable.patch
and it can be found in the queue-6.5 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e6e46a2532b63884f671f3c21425dfdfab76dc2f
Author: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
Date:   Fri Sep 22 09:24:41 2023 +1000

    powerpc/stacktrace: Fix arch_stack_walk_reliable()
    
    [ Upstream commit c5cc3ca707bc916a3f326364751a41f25040aef3 ]
    
    The changes to copy_thread() made in commit eed7c420aac7 ("powerpc:
    copy_thread differentiate kthreads and user mode threads") inadvertently
    broke arch_stack_walk_reliable() because it has knowledge of the stack
    layout.
    
    Fix it by changing the condition to match the new logic in
    copy_thread(). The changes make the comments about the stack layout
    incorrect, rather than rephrasing them just refer the reader to
    copy_thread().
    
    Also the comment about the stack backchain is no longer true, since
    commit edbd0387f324 ("powerpc: copy_thread add a back chain to the
    switch stack frame"), so remove that as well.
    
    Fixes: eed7c420aac7 ("powerpc: copy_thread differentiate kthreads and user mode threads")
    Reported-by: Joe Lawrence <joe.lawrence@xxxxxxxxxx>
    Reviewed-by: Petr Mladek <pmladek@xxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://msgid.link/20230921232441.1181843-1-mpe@xxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kernel/stacktrace.c b/arch/powerpc/kernel/stacktrace.c
index b15f15dcacb5c..e6a958a5da276 100644
--- a/arch/powerpc/kernel/stacktrace.c
+++ b/arch/powerpc/kernel/stacktrace.c
@@ -73,29 +73,12 @@ int __no_sanitize_address arch_stack_walk_reliable(stack_trace_consume_fn consum
 	bool firstframe;
 
 	stack_end = stack_page + THREAD_SIZE;
-	if (!is_idle_task(task)) {
-		/*
-		 * For user tasks, this is the SP value loaded on
-		 * kernel entry, see "PACAKSAVE(r13)" in _switch() and
-		 * system_call_common().
-		 *
-		 * Likewise for non-swapper kernel threads,
-		 * this also happens to be the top of the stack
-		 * as setup by copy_thread().
-		 *
-		 * Note that stack backlinks are not properly setup by
-		 * copy_thread() and thus, a forked task() will have
-		 * an unreliable stack trace until it's been
-		 * _switch()'ed to for the first time.
-		 */
-		stack_end -= STACK_USER_INT_FRAME_SIZE;
-	} else {
-		/*
-		 * idle tasks have a custom stack layout,
-		 * c.f. cpu_idle_thread_init().
-		 */
+
+	// See copy_thread() for details.
+	if (task->flags & PF_KTHREAD)
 		stack_end -= STACK_FRAME_MIN_SIZE;
-	}
+	else
+		stack_end -= STACK_USER_INT_FRAME_SIZE;
 
 	if (task == current)
 		sp = current_stack_frame();



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux