- 
                Notifications
    You must be signed in to change notification settings 
- Fork 146
bpf: tracing session supporting #10066
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpf: tracing session supporting #10066
Conversation
| Upstream branch: e758657 | 
| Upstream branch: e758657 | 
2d2c393    to
    95f151b      
    Compare
  
    | AI reviewed your patch. Please fix the bug or email reply why it's not a bug. In-Reply-To-Subject:  | 
| Forwarding comment 3431079584 via email | 
b92bbe4    to
    ed703de      
    Compare
  
    | Upstream branch: e758657 | 
95f151b    to
    a75afb6      
    Compare
  
    ed703de    to
    d4664e4      
    Compare
  
    | Upstream branch: e758657 | 
a75afb6    to
    23d4389      
    Compare
  
    d4664e4    to
    7c1a423      
    Compare
  
    | Upstream branch: e758657 | 
23d4389    to
    18650df      
    Compare
  
    7c1a423    to
    ecdeefe      
    Compare
  
    The tracing session is something that similar to kprobe session. It allow to attach a single BPF program to both the entry and the exit of the target functions. While a non-zero value is returned by the fentry, the fexit will be skipped, which is similar to kprobe session. Signed-off-by: Menglong Dong <[email protected]> Co-developed-by: Leon Hwang <[email protected]> Signed-off-by: Leon Hwang <[email protected]>
If TRACE_SESSION exists, we will use extra 8-bytes in the stack of the trampoline to store the flags that we needed, and the 8-bytes lie after the return value, which means ctx[nr_args + 1]. And we will store the flag "is_exit" to the first bit of it. Introduce the kfunc bpf_tracing_is_exit(), which is used to tell if it is fexit currently. Meanwhile, inline it in the verifier. Signed-off-by: Menglong Dong <[email protected]> Co-developed-by: Leon Hwang <[email protected]> Signed-off-by: Leon Hwang <[email protected]>
Add the kfunc bpf_fsession_cookie(), which is similar to bpf_session_cookie() and return the address of the session cookie. The address of the session cookie is stored after session flags, which means ctx[nr_args + 2]. Inline this kfunc in the verifier too. Signed-off-by: Menglong Dong <[email protected]>
For now, the offset of the return value in trampoline is fixed 8-bytes. In this commit, we introduce the variable "ret_off" to represent the offset of the return value. For now, the "ret_off" is just 8. And in the following patch, we will make it something else to use the room after it. Signed-off-by: Menglong Dong <[email protected]>
Add BPF_TRACE_SESSION supporting to x86_64. invoke_bpf_session_entry and invoke_bpf_session_exit is introduced for this purpose. In invoke_bpf_session_entry(), we will check if the return value of the fentry is 0, and set the corresponding session flag if not. And in invoke_bpf_session_exit(), we will check if the corresponding flag is set. If set, the fexit will be skipped. As designed, the session flags and session cookie address is stored after the return value, and the stack look like this: cookie ptr -> 8 bytes session flags -> 8 bytes return value -> 8 bytes argN -> 8 bytes ... arg1 -> 8 bytes nr_args -> 8 bytes ... cookieN -> 8 bytes cookie1 -> 8 bytes In the entry of the session, we will clear the return value, so the fentry will always get 0 with ctx[nr_args] or bpf_get_func_ret(). Before the execution of the BPF prog, the "cookie ptr" will be filled with the corresponding cookie address, which is done in invoke_bpf_session_entry() and invoke_bpf_session_exit(). Signed-off-by: Menglong Dong <[email protected]> Co-developed-by: Leon Hwang <[email protected]> Signed-off-by: Leon Hwang <[email protected]>
Add BPF_TRACE_SESSION to libbpf and bpftool. Signed-off-by: Menglong Dong <[email protected]>
As the layout of the stack changed for fsession, we'd better test bpf_get_func_ip() for it. Signed-off-by: Menglong Dong <[email protected]>
Add testcases for BPF_TRACE_SESSION. Signed-off-by: Menglong Dong <[email protected]>
Test the session cookie for fsession. Multiple fsession BPF progs is attached to bpf_fentry_test1() and session cookie is read and write in this testcase. Signed-off-by: Menglong Dong <[email protected]>
| Upstream branch: e758657 | 
Test the fsession when it is used together with fentry, fexit. Signed-off-by: Menglong Dong <[email protected]>
18650df    to
    706b875      
    Compare
  
    
Pull request for series with
subject: bpf: tracing session supporting
version: 2
url: https://patchwork.kernel.org/project/netdevbpf/list/?series=1014394