• Liu Shixin's avatar
    riscv: stacktrace: Fix missing the first frame · cb80242c
    Liu Shixin authored
    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 6a00ef44 ("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: 6a00ef44 ("riscv: eliminate unreliable __builtin_frame_address(1)")
    Signed-off-by: default avatarLiu Shixin <liushixin2@huawei.com>
    Tested-by: default avatarSamuel Holland <samuel@sholland.org>
    Link: https://lore.kernel.org/r/20221207025038.1022045-1-liushixin2@huawei.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    cb80242c
stacktrace.c 3.53 KB