Skip to content
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 trampoline for arm64 #470

Closed
wants to merge 7 commits into from
Closed

Commits on May 23, 2022

  1. adding ci files

    Kernel Patches Daemon committed May 23, 2022
    Configuration menu
    Copy the full SHA
    48b9189 View commit details
    Browse the repository at this point in the history
  2. arm64: ftrace: Add ftrace direct call support

    Add ftrace direct support for arm64.
    
    1. When there is custom trampoline only, replace the fentry nop to a
       jump instruction that jumps directly to the custom trampoline.
    
    2. When ftrace trampoline and custom trampoline coexist, jump from
       fentry to ftrace trampoline first, then jump to custom trampoline
       when ftrace trampoline exits. The current unused register
       pt_regs->orig_x0 is used as an intermediary for jumping from ftrace
       trampoline to custom trampoline.
    
    Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
    Acked-by: Song Liu <songliubraving@fb.com>
    Acked-by: KP Singh <kpsingh@kernel.org>
    Xu Kuohai authored and Kernel Patches Daemon committed May 23, 2022
    Configuration menu
    Copy the full SHA
    468af5e View commit details
    Browse the repository at this point in the history
  3. ftrace: Fix deadloop caused by direct call in ftrace selftest

    After direct call is enabled for arm64, ftrace selftest enters a
    dead loop:
    
    <trace_selftest_dynamic_test_func>:
    00  bti     c
    01  mov     x9, x30                            <trace_direct_tramp>:
    02  bl      <trace_direct_tramp>    ---------->     ret
                                                         |
                                             lr/x30 is 03, return to 03
                                                         |
    03  mov     w0, #0x0   <-----------------------------|
         |                                               |
         |                   dead loop!                  |
         |                                               |
    04  ret   ---- lr/x30 is still 03, go back to 03 ----|
    
    The reason is that when the direct caller trace_direct_tramp() returns
    to the patched function trace_selftest_dynamic_test_func(), lr is still
    the address after the instrumented instruction in the patched function,
    so when the patched function exits, it returns to itself!
    
    To fix this issue, we need to restore lr before trace_direct_tramp()
    exits, so rewrite a dedicated trace_direct_tramp() for arm64.
    
    Reported-by: Li Huafei <lihuafei1@huawei.com>
    Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
    Xu Kuohai authored and Kernel Patches Daemon committed May 23, 2022
    Configuration menu
    Copy the full SHA
    13f3547 View commit details
    Browse the repository at this point in the history
  4. bpf: Remove is_valid_bpf_tramp_flags()

    BPF_TRAM_F_XXX flags are not used by user code and are almost constant
    at compile time, so run time validation is a bit overkill. Remove
    is_valid_bpf_tramp_flags() and add some usage comments.
    
    Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
    Acked-by: Song Liu <songliubraving@fb.com>
    Xu Kuohai authored and Kernel Patches Daemon committed May 23, 2022
    Configuration menu
    Copy the full SHA
    a3d20e4 View commit details
    Browse the repository at this point in the history
  5. bpf, arm64: Impelment bpf_arch_text_poke() for arm64

    Impelment bpf_arch_text_poke() for arm64, so bpf trampoline code can use
    it to replace nop with jump, or replace jump with nop.
    
    Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
    Acked-by: Song Liu <songliubraving@fb.com>
    Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
    Reviewed-by: KP Singh <kpsingh@kernel.org>
    Xu Kuohai authored and Kernel Patches Daemon committed May 23, 2022
    Configuration menu
    Copy the full SHA
    591513f View commit details
    Browse the repository at this point in the history
  6. bpf, arm64: bpf trampoline for arm64

    Add bpf trampoline support for arm64. Most of the logic is the same as
    x86.
    
    Tested on raspberry pi 4b and qemu with KASLR disabled (avoid long jump),
    result:
     #9  /1     bpf_cookie/kprobe:OK
     #9  /2     bpf_cookie/multi_kprobe_link_api:FAIL
     #9  /3     bpf_cookie/multi_kprobe_attach_api:FAIL
     #9  /4     bpf_cookie/uprobe:OK
     #9  /5     bpf_cookie/tracepoint:OK
     #9  /6     bpf_cookie/perf_event:OK
     #9  /7     bpf_cookie/trampoline:OK
     #9  /8     bpf_cookie/lsm:OK
     #9         bpf_cookie:FAIL
     #18 /1     bpf_tcp_ca/dctcp:OK
     #18 /2     bpf_tcp_ca/cubic:OK
     #18 /3     bpf_tcp_ca/invalid_license:OK
     #18 /4     bpf_tcp_ca/dctcp_fallback:OK
     #18 /5     bpf_tcp_ca/rel_setsockopt:OK
     #18        bpf_tcp_ca:OK
     #51 /1     dummy_st_ops/dummy_st_ops_attach:OK
     #51 /2     dummy_st_ops/dummy_init_ret_value:OK
     #51 /3     dummy_st_ops/dummy_init_ptr_arg:OK
     #51 /4     dummy_st_ops/dummy_multiple_args:OK
     #51        dummy_st_ops:OK
     #55        fentry_fexit:OK
     #56        fentry_test:OK
     #57 /1     fexit_bpf2bpf/target_no_callees:OK
     #57 /2     fexit_bpf2bpf/target_yes_callees:OK
     #57 /3     fexit_bpf2bpf/func_replace:OK
     #57 /4     fexit_bpf2bpf/func_replace_verify:OK
     #57 /5     fexit_bpf2bpf/func_sockmap_update:OK
     #57 /6     fexit_bpf2bpf/func_replace_return_code:OK
     #57 /7     fexit_bpf2bpf/func_map_prog_compatibility:OK
     #57 /8     fexit_bpf2bpf/func_replace_multi:OK
     #57 /9     fexit_bpf2bpf/fmod_ret_freplace:OK
     #57        fexit_bpf2bpf:OK
     #58        fexit_sleep:OK
     #59        fexit_stress:OK
     #60        fexit_test:OK
     #67        get_func_args_test:OK
     #68        get_func_ip_test:OK
     #104       modify_return:OK
     #237       xdp_bpf2bpf:OK
    
    bpf_cookie/multi_kprobe_link_api and bpf_cookie/multi_kprobe_attach_api
    failed due to lack of multi_kprobe on arm64.
    
    Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
    Acked-by: Song Liu <songliubraving@fb.com>
    Acked-by: KP Singh <kpsingh@kernel.org>
    Xu Kuohai authored and Kernel Patches Daemon committed May 23, 2022
    Configuration menu
    Copy the full SHA
    27056d7 View commit details
    Browse the repository at this point in the history
  7. selftests/bpf: Fix trivial typo in fentry_fexit.c

    The "ipv6" word in assertion message should be "fentry_fexit".
    
    Signed-off-by: Xu Kuohai <xukuohai@huawei.com>
    Acked-by: Song Liu <songliubraving@fb.com>
    Xu Kuohai authored and Kernel Patches Daemon committed May 23, 2022
    Configuration menu
    Copy the full SHA
    495c826 View commit details
    Browse the repository at this point in the history