• Yonghong Song's avatar
    bpf: Prevent inlining of bpf_fentry_test7() · 32337c0a
    Yonghong Song authored
    
    
    With latest clang18, I hit test_progs failures for the following test:
    
      #13/2    bpf_cookie/multi_kprobe_link_api:FAIL
      #13/3    bpf_cookie/multi_kprobe_attach_api:FAIL
      #13      bpf_cookie:FAIL
      #75      fentry_fexit:FAIL
      #76/1    fentry_test/fentry:FAIL
      #76      fentry_test:FAIL
      #80/1    fexit_test/fexit:FAIL
      #80      fexit_test:FAIL
      #110/1   kprobe_multi_test/skel_api:FAIL
      #110/2   kprobe_multi_test/link_api_addrs:FAIL
      #110/3   kprobe_multi_test/link_api_syms:FAIL
      #110/4   kprobe_multi_test/attach_api_pattern:FAIL
      #110/5   kprobe_multi_test/attach_api_addrs:FAIL
      #110/6   kprobe_multi_test/attach_api_syms:FAIL
      #110     kprobe_multi_test:FAIL
    
    For example, for #13/2, the error messages are:
    
      [...]
      kprobe_multi_test_run:FAIL:kprobe_test7_result unexpected kprobe_test7_result: actual 0 != expected 1
      [...]
      kprobe_multi_test_run:FAIL:kretprobe_test7_result unexpected kretprobe_test7_result: actual 0 != expected 1
    
    clang17 does not have this issue.
    
    Further investigation shows that kernel func bpf_fentry_test7(), used in
    the above tests, is inlined by the compiler although it is marked as
    noinline.
    
      int noinline bpf_fentry_test7(struct bpf_fentry_test_t *arg)
      {
            return (long)arg;
      }
    
    It is known that for simple functions like the above (e.g. just returning
    a constant or an input argument), the clang compiler may still do inlining
    for a noinline function. Adding 'asm volatile ("")' in the beginning of the
    bpf_fentry_test7() can prevent inlining.
    Signed-off-by: default avatarYonghong Song <yonghong.song@linux.dev>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Tested-by: default avatarEduard Zingerman <eddyz87@gmail.com>
    Link: https://lore.kernel.org/bpf/20230826200843.2210074-1-yonghong.song@linux.dev
    32337c0a
test_run.c 39.4 KB