• Andrii Nakryiko's avatar
    selftests/bpf: add test validating uprobe/uretprobe stack traces · 637c26f9
    Andrii Nakryiko authored
    Add a set of tests to validate that stack traces captured from or in the
    presence of active uprobes and uretprobes are valid and complete.
    
    For this we use BPF program that are installed either on entry or exit
    of user function, plus deep-nested USDT. One of target funtions
    (target_1) is recursive to generate two different entries in the stack
    trace for the same uprobe/uretprobe, testing potential edge conditions.
    
    If there is no fixes, we get something like this for one of the scenarios:
    
     caller: 0x758fff - 0x7595ab
     target_1: 0x758fd5 - 0x758fff
     target_2: 0x758fca - 0x758fd5
     target_3: 0x758fbf - 0x758fca
     target_4: 0x758fb3 - 0x758fbf
     ENTRY #0: 0x758fb3 (in target_4)
     ENTRY #1: 0x758fd3 (in target_2)
     ENTRY #2: 0x758ffd (in target_1)
     ENTRY #3: 0x7fffffffe000
     ENTRY #4: 0x7fffffffe000
     ENTRY #5: 0x6f8f39
     ENTRY #6: 0x6fa6f0
     ENTRY #7: 0x7f403f229590
    
    Entry #3 and #4 (0x7fffffffe000) are uretprobe trampoline addresses
    which obscure actual target_1 and another target_1 invocations. Also
    note that between entry #0 and entry #1 we are missing an entry for
    target_3.
    
    With fixes, we get desired full stack traces:
    
     caller: 0x758fff - 0x7595ab
     target_1: 0x758fd5 - 0x758fff
     target_2: 0x758fca - 0x758fd5
     target_3: 0x758fbf - 0x758fca
     target_4: 0x758fb3 - 0x758fbf
     ENTRY #0: 0x758fb7 (in target_4)
     ENTRY #1: 0x758fc8 (in target_3)
     ENTRY #2: 0x758fd3 (in target_2)
     ENTRY #3: 0x758ffd (in target_1)
     ENTRY #4: 0x758ff3 (in target_1)
     ENTRY #5: 0x75922c (in caller)
     ENTRY #6: 0x6f8f39
     ENTRY #7: 0x6fa6f0
     ENTRY #8: 0x7f986adc4cd0
    
    Now there is a logical and complete sequence of function calls.
    
    Link: https://lore.kernel.org/all/20240522013845.1631305-5-andrii@kernel.org/Signed-off-by: default avatarAndrii Nakryiko <andrii@kernel.org>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Signed-off-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
    637c26f9
uretprobe_stack.c 2.25 KB