Patch "riscv: stacktrace: Fix missing the first frame" has been added to the 5.15-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

    riscv: stacktrace: Fix missing the first frame

to the 5.15-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:
     riscv-stacktrace-fix-missing-the-first-frame.patch
and it can be found in the queue-5.15 subdirectory.

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



commit 91bed2bba786bbe8302cbdcd568c09d57653b62e
Author: Liu Shixin <liushixin2@xxxxxxxxxx>
Date:   Wed Dec 7 10:50:38 2022 +0800

    riscv: stacktrace: Fix missing the first frame
    
    [ Upstream commit cb80242cc679d6397e77d8a964deeb3ff218d2b5 ]
    
    When running kfence_test, I found some testcases failed like this:
    
     # test_out_of_bounds_read: EXPECTATION FAILED at mm/kfence/kfence_test.c:346
     Expected report_matches(&expect) to be true, but is false
     not ok 1 - test_out_of_bounds_read
    
    The corresponding call-trace is:
    
     BUG: KFENCE: out-of-bounds read in kunit_try_run_case+0x38/0x84
    
     Out-of-bounds read at 0x(____ptrval____) (32B right of kfence-#10):
      kunit_try_run_case+0x38/0x84
      kunit_generic_run_threadfn_adapter+0x12/0x1e
      kthread+0xc8/0xde
      ret_from_exception+0x0/0xc
    
    The kfence_test using the first frame of call trace to check whether the
    testcase is succeed or not. Commit 6a00ef449370 ("riscv: eliminate
    unreliable __builtin_frame_address(1)") skip first frame for all
    case, which results the kfence_test failed. Indeed, we only need to skip
    the first frame for case (task==NULL || task==current).
    
    With this patch, the call-trace will be:
    
     BUG: KFENCE: out-of-bounds read in test_out_of_bounds_read+0x88/0x19e
    
     Out-of-bounds read at 0x(____ptrval____) (1B left of kfence-#7):
      test_out_of_bounds_read+0x88/0x19e
      kunit_try_run_case+0x38/0x84
      kunit_generic_run_threadfn_adapter+0x12/0x1e
      kthread+0xc8/0xde
      ret_from_exception+0x0/0xc
    
    Fixes: 6a00ef449370 ("riscv: eliminate unreliable __builtin_frame_address(1)")
    Signed-off-by: Liu Shixin <liushixin2@xxxxxxxxxx>
    Tested-by: Samuel Holland <samuel@xxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221207025038.1022045-1-liushixin2@xxxxxxxxxx
    Signed-off-by: Palmer Dabbelt <palmer@xxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/riscv/kernel/stacktrace.c b/arch/riscv/kernel/stacktrace.c
index 811e837a8c4ee..ee8ef91c8aaf4 100644
--- a/arch/riscv/kernel/stacktrace.c
+++ b/arch/riscv/kernel/stacktrace.c
@@ -32,6 +32,7 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
 		fp = (unsigned long)__builtin_frame_address(0);
 		sp = sp_in_global;
 		pc = (unsigned long)walk_stackframe;
+		level = -1;
 	} else {
 		/* task blocked in __switch_to */
 		fp = task->thread.s[0];
@@ -43,7 +44,7 @@ void notrace walk_stackframe(struct task_struct *task, struct pt_regs *regs,
 		unsigned long low, high;
 		struct stackframe *frame;
 
-		if (unlikely(!__kernel_text_address(pc) || (level++ >= 1 && !fn(arg, pc))))
+		if (unlikely(!__kernel_text_address(pc) || (level++ >= 0 && !fn(arg, pc))))
 			break;
 
 		/* Validate frame pointer */



[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