Commit Graph

9489 Commits

Author SHA1 Message Date
Yauheni Kaliuta b92a5fb165 selftests/bpf: Add selftest for calling global functions from freplace
Bugzilla: https://bugzilla.redhat.com/2120968

commit 2cf7b7ffdae519b284f1406012b52e2282fa36bf
Author: Toke Høiland-Jørgensen <toke@redhat.com>
Date:   Mon Jun 6 09:52:52 2022 +0200

    selftests/bpf: Add selftest for calling global functions from freplace
    
    Add a selftest that calls a global function with a context object parameter
    from an freplace function to check that the program context type is
    correctly converted to the freplace target when fetching the context type
    from the kernel BTF.
    
    v2:
    - Trim includes
    - Get rid of global function
    - Use __noinline
    
    Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
    Link: https://lore.kernel.org/r/20220606075253.28422-2-toke@redhat.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:07 +02:00
Yauheni Kaliuta 60981f5c3d selftests/bpf: fix stacktrace_build_id with missing kprobe/urandom_read
Bugzilla: https://bugzilla.redhat.com/2120968

commit 59ed76fe2f981bccde37bdddb465f260a96a2404
Author: Song Liu <song@kernel.org>
Date:   Thu May 26 12:16:08 2022 -0700

    selftests/bpf: fix stacktrace_build_id with missing kprobe/urandom_read
    
    Kernel function urandom_read is replaced with urandom_read_iter.
    Therefore, kprobe on urandom_read is not working any more:
    
    [root@eth50-1 bpf]# ./test_progs -n 161
    test_stacktrace_build_id:PASS:skel_open_and_load 0 nsec
    libbpf: kprobe perf_event_open() failed: No such file or directory
    libbpf: prog 'oncpu': failed to create kprobe 'urandom_read+0x0' \
            perf event: No such file or directory
    libbpf: prog 'oncpu': failed to auto-attach: -2
    test_stacktrace_build_id:FAIL:attach_tp err -2
    161     stacktrace_build_id:FAIL
    
    Fix this by replacing urandom_read with urandom_read_iter in the test.
    
    Fixes: 1b388e7765f2 ("random: convert to using fops->read_iter()")
    Reported-by: Mykola Lysenko <mykolal@fb.com>
    Signed-off-by: Song Liu <song@kernel.org>
    Acked-by: David Vernet <void@manifault.com>
    Link: https://lore.kernel.org/r/20220526191608.2364049-1-song@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:07 +02:00
Yauheni Kaliuta 391421824c selftests/bpf: Dynptr tests
Bugzilla: https://bugzilla.redhat.com/2120968

commit 0cf7052a55128f7fd7905f6ae6eb995d6db76b52
Author: Joanne Koong <joannelkoong@gmail.com>
Date:   Mon May 23 14:07:12 2022 -0700

    selftests/bpf: Dynptr tests
    
    This patch adds tests for dynptrs, which include cases that the
    verifier needs to reject (for example, a bpf_ringbuf_reserve_dynptr
    without a corresponding bpf_ringbuf_submit/discard_dynptr) as well
    as cases that should successfully pass.
    
    Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220523210712.3641569-7-joannelkoong@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta 83fe4186e1 selftests/bpf: fix btf_dump/btf_dump due to recent clang change
Bugzilla: https://bugzilla.redhat.com/2120968

commit 4050764cbaa25760aab40857f723393c07898474
Author: Yonghong Song <yhs@fb.com>
Date:   Mon May 23 08:20:44 2022 -0700

    selftests/bpf: fix btf_dump/btf_dump due to recent clang change
    
    Latest llvm-project upstream had a change of behavior
    related to qualifiers on function return type ([1]).
    This caused selftests btf_dump/btf_dump failure.
    The following example shows what changed.
    
      $ cat t.c
      typedef const char * const (* const (* const fn_ptr_arr2_t[5])())(char * (*)(int));
      struct t {
        int a;
        fn_ptr_arr2_t l;
      };
      int foo(struct t *arg) {
        return arg->a;
      }
    
    Compiled with latest upstream llvm15,
      $ clang -O2 -g -target bpf -S -emit-llvm t.c
    The related generated debuginfo IR looks like:
      !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "fn_ptr_arr2_t", file: !1, line: 1, baseType: !17)
      !17 = !DICompositeType(tag: DW_TAG_array_type, baseType: !18, size: 320, elements: !32)
      !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
      !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
      !20 = !DISubroutineType(types: !21)
      !21 = !{!22, null}
      !22 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !23, size: 64)
      !23 = !DISubroutineType(types: !24)
      !24 = !{!25, !28}
      !25 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !26, size: 64)
      !26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !27)
      !27 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
    You can see two intermediate const qualifier to pointer are dropped in debuginfo IR.
    
    With llvm14, we have following debuginfo IR:
      !16 = !DIDerivedType(tag: DW_TAG_typedef, name: "fn_ptr_arr2_t", file: !1, line: 1, baseType: !17)
      !17 = !DICompositeType(tag: DW_TAG_array_type, baseType: !18, size: 320, elements: !34)
      !18 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !19)
      !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !20, size: 64)
      !20 = !DISubroutineType(types: !21)
      !21 = !{!22, null}
      !22 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !23)
      !23 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !24, size: 64)
      !24 = !DISubroutineType(types: !25)
      !25 = !{!26, !30}
      !26 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !27)
      !27 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !28, size: 64)
      !28 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !29)
      !29 = !DIBasicType(name: "char", size: 8, encoding: DW_ATE_signed_char)
    All const qualifiers are preserved.
    
    To adapt the selftest to both old and new llvm, this patch removed
    the intermediate const qualifier in const-to-ptr types, to make the
    test succeed again.
    
      [1] https://reviews.llvm.org/D125919
    
    Reported-by: Mykola Lysenko <mykolal@fb.com>
    Signed-off-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/20220523152044.3905809-1-yhs@fb.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta e0f4c3b5a9 selftests/bpf: Fix spelling mistake: "unpriviliged" -> "unprivileged"
Bugzilla: https://bugzilla.redhat.com/2120968

commit f9a3eca4bc0452a7079282d1ad87d65cb3463f0a
Author: Colin Ian King <colin.i.king@gmail.com>
Date:   Mon May 23 12:56:04 2022 +0100

    selftests/bpf: Fix spelling mistake: "unpriviliged" -> "unprivileged"
    
    There are spelling mistakes in ASSERT messages. Fix these.
    
    Signed-off-by: Colin Ian King <colin.i.king@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220523115604.49942-1-colin.i.king@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta 1a787a4186 selftests/bpf: add tests verifying unprivileged bpf behaviour
Bugzilla: https://bugzilla.redhat.com/2120968

commit 90a039fd19fc35d03a74ce2973992c878546cb20
Author: Alan Maguire <alan.maguire@oracle.com>
Date:   Thu May 19 15:25:34 2022 +0100

    selftests/bpf: add tests verifying unprivileged bpf behaviour
    
    tests load/attach bpf prog with maps, perfbuf and ringbuf, pinning
    them.  Then effective caps are dropped and we verify we can
    
    - pick up the pin
    - create ringbuf/perfbuf
    - get ringbuf/perfbuf events, carry out map update, lookup and delete
    - create a link
    
    Negative testing also ensures
    
    - BPF prog load fails
    - BPF map create fails
    - get fd by id fails
    - get next id fails
    - query fails
    - BTF load fails
    
    Signed-off-by: Alan Maguire <alan.maguire@oracle.com>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/r/1652970334-30510-3-git-send-email-alan.maguire@oracle.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta eed165c571 selftests/bpf: Remove filtered subtests from output
Bugzilla: https://bugzilla.redhat.com/2120968

commit 2dc323b1c4cb8ab7db9f8286a9c3267ce66419ab
Author: Mykola Lysenko <mykolal@fb.com>
Date:   Thu May 19 23:13:03 2022 -0700

    selftests/bpf: Remove filtered subtests from output
    
    Currently filtered subtests show up in the output as skipped.
    
    Before:
    $ sudo ./test_progs -t log_fixup/missing_map
     #94 /1     log_fixup/bad_core_relo_trunc_none:SKIP
     #94 /2     log_fixup/bad_core_relo_trunc_partial:SKIP
     #94 /3     log_fixup/bad_core_relo_trunc_full:SKIP
     #94 /4     log_fixup/bad_core_relo_subprog:SKIP
     #94 /5     log_fixup/missing_map:OK
     #94        log_fixup:OK
    Summary: 1/1 PASSED, 0 SKIPPED, 0 FAILED
    
    After:
    $ sudo ./test_progs -t log_fixup/missing_map
     #94 /5     log_fixup/missing_map:OK
     #94        log_fixup:OK
    Summary: 1/1 PASSED, 0 SKIPPED, 0 FAILED
    
    Signed-off-by: Mykola Lysenko <mykolal@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220520061303.4004808-1-mykolal@fb.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta 92b26405b1 selftests/bpf: Fix subtest number formatting in test_progs
Bugzilla: https://bugzilla.redhat.com/2120968

commit fa376860658252a4559026496528c5d3a36b52e3
Author: Mykola Lysenko <mykolal@fb.com>
Date:   Fri May 20 00:01:44 2022 -0700

    selftests/bpf: Fix subtest number formatting in test_progs
    
    Remove weird spaces around / while preserving proper
    indentation
    
    Signed-off-by: Mykola Lysenko <mykolal@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Daniel Müller <deso@posteo.net>
    Link: https://lore.kernel.org/bpf/20220520070144.10312-1-mykolal@fb.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 4bfa382f9b selftests/bpf: Add missing trampoline program type to trampoline_count test
Bugzilla: https://bugzilla.redhat.com/2120968

commit b23316aabffa835ecc516cb81daeef5b9155e8a5
Author: Yuntao Wang <ytcoode@gmail.com>
Date:   Thu May 19 23:06:10 2022 +0800

    selftests/bpf: Add missing trampoline program type to trampoline_count test
    
    Currently the trampoline_count test doesn't include any fmod_ret bpf
    programs, fix it to make the test cover all possible trampoline program
    types.
    
    Since fmod_ret bpf programs can't be attached to __set_task_comm function,
    as it's neither whitelisted for error injection nor a security hook, change
    it to bpf_modify_return_test.
    
    This patch also does some other cleanups such as removing duplicate code,
    dropping inconsistent comments, etc.
    
    Signed-off-by: Yuntao Wang <ytcoode@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220519150610.601313-1-ytcoode@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 37100d6d37 selftests/bpf: Verify first of struct mptcp_sock
Bugzilla: https://bugzilla.redhat.com/2120968

commit 4f90d034bba9bdcb06a3cb53c43012351c1b39ff
Author: Geliang Tang <geliang.tang@suse.com>
Date:   Thu May 19 16:30:16 2022 -0700

    selftests/bpf: Verify first of struct mptcp_sock
    
    This patch verifies the 'first' struct member of struct mptcp_sock, which
    points to the first subflow of msk. Save 'sk' in mptcp_storage, and verify
    it with 'first' in verify_msk().
    
    v5:
     - Use ASSERT_EQ() instead of a manual comparison + log (Andrii).
    
    Signed-off-by: Geliang Tang <geliang.tang@suse.com>
    Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Link: https://lore.kernel.org/bpf/20220519233016.105670-8-mathew.j.martineau@linux.intel.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 9c58449589 selftests/bpf: Verify ca_name of struct mptcp_sock
Bugzilla: https://bugzilla.redhat.com/2120968

commit ccc090f469000fd757049028eeb0dff43013f7c1
Author: Geliang Tang <geliang.tang@suse.com>
Date:   Thu May 19 16:30:15 2022 -0700

    selftests/bpf: Verify ca_name of struct mptcp_sock
    
    This patch verifies another member of struct mptcp_sock, ca_name. Add a
    new function get_msk_ca_name() to read the sysctl tcp_congestion_control
    and verify it in verify_msk().
    
    v3: Access the sysctl through the filesystem to avoid compatibility
        issues with the busybox sysctl command.
    
    v4: use ASSERT_* instead of CHECK_FAIL (Andrii)
    
    v5: use ASSERT_STRNEQ() instead of strncmp() (Andrii)
    
    Signed-off-by: Geliang Tang <geliang.tang@suse.com>
    Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Link: https://lore.kernel.org/bpf/20220519233016.105670-7-mathew.j.martineau@linux.intel.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 3835afc2d5 selftests/bpf: Verify token of struct mptcp_sock
Bugzilla: https://bugzilla.redhat.com/2120968

commit 0266223467728d553b99adea769d9ff3b6e41372
Author: Geliang Tang <geliang.tang@suse.com>
Date:   Thu May 19 16:30:14 2022 -0700

    selftests/bpf: Verify token of struct mptcp_sock
    
    This patch verifies the struct member token of struct mptcp_sock. Add a
    new member token in struct mptcp_storage to store the token value of the
    msk socket got by bpf_skc_to_mptcp_sock(). Trace the kernel function
    mptcp_pm_new_connection() by using bpf fentry prog to obtain the msk token
    and save it in a global bpf variable. Pass the variable to verify_msk() to
    verify it with the token saved in socket_storage_map.
    
    v4:
     - use ASSERT_* instead of CHECK_FAIL (Andrii)
     - skip the test if 'ip mptcp monitor' is not supported (Mat)
    
    v5:
     - Drop 'ip mptcp monitor', trace mptcp_pm_new_connection instead (Martin)
     - Use ASSERT_EQ (Andrii)
    
    Signed-off-by: Geliang Tang <geliang.tang@suse.com>
    Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Link: https://lore.kernel.org/bpf/20220519233016.105670-6-mathew.j.martineau@linux.intel.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta f9bc572e34 selftests/bpf: Test bpf_skc_to_mptcp_sock
Bugzilla: https://bugzilla.redhat.com/2120968

commit 3bc48b56e345e2ed83841dd08a00c6a9f112be6c
Author: Geliang Tang <geliang.tang@suse.com>
Date:   Thu May 19 16:30:13 2022 -0700

    selftests/bpf: Test bpf_skc_to_mptcp_sock
    
    This patch extends the MPTCP test base, to test the new helper
    bpf_skc_to_mptcp_sock().
    
    Define struct mptcp_sock in bpf_tcp_helpers.h, use bpf_skc_to_mptcp_sock
    to get the msk socket in progs/mptcp_sock.c and store the infos in
    socket_storage_map.
    
    Get the infos from socket_storage_map in prog_tests/mptcp.c. Add a new
    function verify_msk() to verify the infos of MPTCP socket, and rename
    verify_sk() to verify_tsk() to verify TCP socket only.
    
    v2: Add CONFIG_MPTCP check for clearer error messages
    
    v4:
     - use ASSERT_* instead of CHECK_FAIL (Andrii)
     - drop bpf_mptcp_helpers.h (Andrii)
    
    v5:
     - some 'ASSERT_*' were replaced in the next commit by mistake.
     - Drop CONFIG_MPTCP (Martin)
     - Use ASSERT_EQ (Andrii)
    
    Signed-off-by: Geliang Tang <geliang.tang@suse.com>
    Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Link: https://lore.kernel.org/bpf/20220519233016.105670-5-mathew.j.martineau@linux.intel.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 5491f13bb7 selftests/bpf: Add MPTCP test base
Bugzilla: https://bugzilla.redhat.com/2120968

commit 8039d353217c1d9dae921f131cfe4153bc23e960
Author: Nicolas Rybowski <nicolas.rybowski@tessares.net>
Date:   Thu May 19 16:30:12 2022 -0700

    selftests/bpf: Add MPTCP test base
    
    This patch adds a base for MPTCP specific tests.
    
    It is currently limited to the is_mptcp field in case of plain TCP
    connection because there is no easy way to get the subflow sk from a msk
    in userspace. This implies that we cannot lookup the sk_storage attached
    to the subflow sk in the sockops program.
    
    v4:
     - add copyright 2022 (Andrii)
     - use ASSERT_* instead of CHECK_FAIL (Andrii)
     - drop SEC("version") (Andrii)
     - use is_mptcp in tcp_sock, instead of bpf_tcp_sock (Martin & Andrii)
    
    v5:
     - Drop connect_to_mptcp_fd (Martin)
     - Use BPF test skeleton (Andrii)
     - Use ASSERT_EQ (Andrii)
     - Drop the 'msg' parameter of verify_sk
    
    Co-developed-by: Geliang Tang <geliang.tang@suse.com>
    Signed-off-by: Geliang Tang <geliang.tang@suse.com>
    Signed-off-by: Nicolas Rybowski <nicolas.rybowski@tessares.net>
    Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Link: https://lore.kernel.org/bpf/20220519233016.105670-4-mathew.j.martineau@linux.intel.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 47d74f0c77 selftests/bpf: Enable CONFIG_IKCONFIG_PROC in config
Bugzilla: https://bugzilla.redhat.com/2120968

commit d3294cb1e06d70a689924792c2acb897eac7d781
Author: Geliang Tang <geliang.tang@suse.com>
Date:   Thu May 19 16:30:11 2022 -0700

    selftests/bpf: Enable CONFIG_IKCONFIG_PROC in config
    
    CONFIG_IKCONFIG_PROC is required by BPF selftests, otherwise we get
    errors like this:
    
     libbpf: failed to open system Kconfig
     libbpf: failed to load object 'kprobe_multi'
     libbpf: failed to load BPF skeleton 'kprobe_multi': -22
    
    It's because /proc/config.gz is opened in bpf_object__read_kconfig_file()
    in tools/lib/bpf/libbpf.c:
    
            file = gzopen("/proc/config.gz", "r");
    
    So this patch enables CONFIG_IKCONFIG and CONFIG_IKCONFIG_PROC in
    tools/testing/selftests/bpf/config.
    
    Suggested-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: Geliang Tang <geliang.tang@suse.com>
    Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220519233016.105670-3-mathew.j.martineau@linux.intel.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 53653cbc8d selftests/bpf: Fix some bugs in map_lookup_percpu_elem testcase
Bugzilla: https://bugzilla.redhat.com/2120968

commit 7aa424e02a04bba5ecc84afe9b58b16e9e0b34f8
Author: Feng Zhou <zhoufeng.zf@bytedance.com>
Date:   Wed May 18 10:50:53 2022 +0800

    selftests/bpf: Fix some bugs in map_lookup_percpu_elem testcase
    
    comments from Andrii Nakryiko, details in here:
    https://lore.kernel.org/lkml/20220511093854.411-1-zhoufeng.zf@bytedance.com/T/
    
    use /* */ instead of //
    use libbpf_num_possible_cpus() instead of sysconf(_SC_NPROCESSORS_ONLN)
    use 8 bytes for value size
    fix memory leak
    use ASSERT_EQ instead of ASSERT_OK
    add bpf_loop to fetch values on each possible CPU
    
    Fixes: ed7c13776e20c74486b0939a3c1de984c5efb6aa ("selftests/bpf: add test case for bpf_map_lookup_percpu_elem")
    Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220518025053.20492-1-zhoufeng.zf@bytedance.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 710483bab8 selftests/bpf: Add missed ima_setup.sh in Makefile
Bugzilla: https://bugzilla.redhat.com/2120968

commit 70a1b25326dd77e145157ccf1a31c1948032eec4
Author: Hangbin Liu <liuhangbin@gmail.com>
Date:   Mon May 16 12:00:20 2022 +0800

    selftests/bpf: Add missed ima_setup.sh in Makefile
    
    When build bpf test and install it to another folder, e.g.
    
      make -j10 install -C tools/testing/selftests/ TARGETS="bpf" \
    	SKIP_TARGETS="" INSTALL_PATH=/tmp/kselftests
    
    The ima_setup.sh is missed in target folder, which makes test_ima failed.
    
    Fix it by adding ima_setup.sh to TEST_PROGS_EXTENDED.
    
    Fixes: 34b82d3ac1 ("bpf: Add a selftest for bpf_ima_inode_hash")
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220516040020.653291-1-liuhangbin@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 36b091ef3c selftests/bpf: Fix building bpf selftests statically
Bugzilla: https://bugzilla.redhat.com/2120968

commit 68084a13642001b73aade05819584f18945f3297
Author: Yosry Ahmed <yosryahmed@google.com>
Date:   Sat May 14 00:21:15 2022 +0000

    selftests/bpf: Fix building bpf selftests statically
    
    bpf selftests can no longer be built with CFLAGS=-static with
    liburandom_read.so and its dependent target.
    
    Filter out -static for liburandom_read.so and its dependent target.
    
    When building statically, this leaves urandom_read relying on
    system-wide shared libraries.
    
    Signed-off-by: Yosry Ahmed <yosryahmed@google.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220514002115.1376033-1-yosryahmed@google.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:04 +02:00
Yauheni Kaliuta ac6e220531 selftests/bpf: Fix usdt_400 test case
Bugzilla: https://bugzilla.redhat.com/2120968

commit 0d2d2648931bdb1a629bf0df4e339e6a326a6136
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Fri May 13 10:37:03 2022 -0700

    selftests/bpf: Fix usdt_400 test case
    
    usdt_400 test case relies on compiler using the same arg spec for
    usdt_400 USDT. This assumption breaks with Clang (Clang generates
    different arg specs with varying offsets relative to %rbp), so simplify
    this further and hard-code the constant which will guarantee that arg
    spec is the same across all 400 inlinings.
    
    Fixes: 630301b0d59d ("selftests/bpf: Add basic USDT selftests")
    Reported-by: Mykola Lysenko <mykolal@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220513173703.89271-1-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:04 +02:00
Yauheni Kaliuta f3948f6ae4 selftests/bpf: Convert some selftests to high-level BPF map APIs
Bugzilla: https://bugzilla.redhat.com/2120968

commit b2531d4bdce19f28364b45aac9132e153b1f23a4
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Thu May 12 15:07:13 2022 -0700

    selftests/bpf: Convert some selftests to high-level BPF map APIs
    
    Convert a bunch of selftests to using newly added high-level BPF map
    APIs.
    
    This change exposed that map_kptr selftests allocated too big buffer,
    which is fixed in this patch as well.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220512220713.2617964-2-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:04 +02:00
Yauheni Kaliuta 82e29813d9 selftests/bpf: Check combination of jit blinding and pointers to bpf subprogs.
Bugzilla: https://bugzilla.redhat.com/2120968

commit 365d519923a279af379a8d0f641ef50e44bb610e
Author: Alexei Starovoitov <ast@kernel.org>
Date:   Thu May 12 18:10:25 2022 -0700

    selftests/bpf: Check combination of jit blinding and pointers to bpf subprogs.
    
    Check that ld_imm64 with src_reg=1 (aka BPF_PSEUDO_FUNC) works
    with jit_blinding.
    
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Martin KaFai Lau <kafai@fb.com>
    Link: https://lore.kernel.org/bpf/20220513011025.13344-2-alexei.starovoitov@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:04 +02:00
Yauheni Kaliuta d094e3733b selftests/bpf: make fexit_stress test run in serial mode
Bugzilla: https://bugzilla.redhat.com/2120968

commit 5790a2fee02c48e28fde2ce7ea4765eeadcda0ba
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Wed May 11 16:20:12 2022 -0700

    selftests/bpf: make fexit_stress test run in serial mode
    
    fexit_stress is attaching maximum allowed amount of fexit programs to
    bpf_fentry_test1 kernel function, which is used by a bunch of other
    parallel tests, thus pretty frequently interfering with their execution.
    
    Given the test assumes nothing else is attaching to bpf_fentry_test1,
    mark it serial.
    
    Suggested-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20220511232012.609370-1-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:04 +02:00
Yauheni Kaliuta 5e0df917c7 selftests/bpf: add test case for bpf_map_lookup_percpu_elem
Bugzilla: https://bugzilla.redhat.com/2120968

commit ed7c13776e20c74486b0939a3c1de984c5efb6aa
Author: Feng Zhou <zhoufeng.zf@bytedance.com>
Date:   Wed May 11 17:38:54 2022 +0800

    selftests/bpf: add test case for bpf_map_lookup_percpu_elem
    
    test_progs:
    Tests new ebpf helpers bpf_map_lookup_percpu_elem.
    
    Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com>
    Link: https://lore.kernel.org/r/20220511093854.411-3-zhoufeng.zf@bytedance.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:04 +02:00
Yauheni Kaliuta 0399513059 selftests/bpf: Add tests for kptr_ref refcounting
Bugzilla: https://bugzilla.redhat.com/2120968

commit 0ef6740e97777bbe04aeacd32239ccb1732098d7
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Thu May 12 01:16:54 2022 +0530

    selftests/bpf: Add tests for kptr_ref refcounting
    
    Check at runtime how various operations for kptr_ref affect its refcount
    and verify against the actual count.
    
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20220511194654.765705-5-memxor@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:04 +02:00
Yauheni Kaliuta ebc477f33e selftests/bpf: Add negative C tests for kptrs
Bugzilla: https://bugzilla.redhat.com/2120968

commit 04accf794bb2a5a06f23f7d48d195ffa329181a6
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Thu May 12 01:16:53 2022 +0530

    selftests/bpf: Add negative C tests for kptrs
    
    This uses the newly added SEC("?foo") naming to disable autoload of
    programs, and then loads them one by one for the object and verifies
    that loading fails and matches the returned error string from verifier.
    This is similar to already existing verifier tests but provides coverage
    for BPF C.
    
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20220511194654.765705-4-memxor@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:04 +02:00
Yauheni Kaliuta ed4c742acc bpf: Prepare prog_test_struct kfuncs for runtime tests
Bugzilla: https://bugzilla.redhat.com/2120968

commit 5cdccadcac2612f947ebc26ad7023dfb7e8871f9
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Thu May 12 01:16:52 2022 +0530

    bpf: Prepare prog_test_struct kfuncs for runtime tests
    
    In an effort to actually test the refcounting logic at runtime, add a
    refcount_t member to prog_test_ref_kfunc and use it in selftests to
    verify and test the whole logic more exhaustively.
    
    The kfunc calls for prog_test_member do not require runtime refcounting,
    as they are only used for verifier selftests, not during runtime
    execution. Hence, their implementation now has a WARN_ON_ONCE as it is
    not meant to be reachable code at runtime. It is strictly used in tests
    triggering failure cases in the verifier. bpf_kfunc_call_memb_release is
    called from map free path, since prog_test_member is embedded in map
    value for some verifier tests, so we skip WARN_ON_ONCE for it.
    
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Link: https://lore.kernel.org/r/20220511194654.765705-3-memxor@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 7ca5c1361c selftests/bpf: fix a few clang compilation errors
Bugzilla: https://bugzilla.redhat.com/2120968

commit fd0ad6f1d10c01796904608aacd6e70d6f624305
Author: Yonghong Song <yhs@fb.com>
Date:   Wed May 11 11:47:35 2022 -0700

    selftests/bpf: fix a few clang compilation errors
    
    With latest clang, I got the following compilation errors:
      .../prog_tests/test_tunnel.c:291:6: error: variable 'local_ip_map_fd' is used uninitialized
         whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
           if (attach_tc_prog(&tc_hook, -1, set_dst_prog_fd))
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      .../bpf/prog_tests/test_tunnel.c:312:6: note: uninitialized use occurs here
            if (local_ip_map_fd >= 0)
                ^~~~~~~~~~~~~~~
      ...
      .../prog_tests/kprobe_multi_test.c:346:6: error: variable 'err' is used uninitialized
          whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
            if (IS_ERR(map))
                ^~~~~~~~~~~
      .../prog_tests/kprobe_multi_test.c:388:6: note: uninitialized use occurs here
            if (err) {
                ^~~
    
    This patch fixed the above compilation errors.
    
    Signed-off-by: Yonghong Song <yhs@fb.com>
    Acked-by: David Vernet <void@manifault.com>
    Link: https://lore.kernel.org/r/20220511184735.3670214-1-yhs@fb.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 8510de56f2 selftests/bpf: Enable CONFIG_FPROBE for self tests
Bugzilla: https://bugzilla.redhat.com/2120968

commit 998e1869de1b10caec6ec940632ff271036926f5
Author: Daniel Müller <deso@posteo.net>
Date:   Wed May 11 17:22:49 2022 +0000

    selftests/bpf: Enable CONFIG_FPROBE for self tests
    
    Some of the BPF selftests are failing when running with a rather bare
    bones configuration based on tools/testing/selftests/bpf/config.
    Specifically, we see a bunch of failures due to errno 95:
    
      > test_attach_api:PASS:fentry_raw_skel_load 0 nsec
      > libbpf: prog 'test_kprobe_manual': failed to attach: Operation not supported
      > test_attach_api:FAIL:bpf_program__attach_kprobe_multi_opts unexpected error: -95
      > 79 /6     kprobe_multi_test/attach_api_syms:FAIL
    
    The cause of these is that CONFIG_FPROBE is missing. With this change we
    add this configuration value to the BPF selftests config.
    
    Signed-off-by: Daniel Müller <deso@posteo.net>
    Acked-by: David Vernet <void@manifault.com>
    Link: https://lore.kernel.org/r/20220511172249.4082510-1-deso@posteo.net
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 93e9445c58 selftest/bpf: The test cases of BPF cookie for fentry/fexit/fmod_ret/lsm.
Bugzilla: https://bugzilla.redhat.com/2120968

commit ddc0027a4c3f0cf07a5d54178f016535ef58bca5
Author: Kui-Feng Lee <kuifeng@fb.com>
Date:   Tue May 10 13:59:23 2022 -0700

    selftest/bpf: The test cases of BPF cookie for fentry/fexit/fmod_ret/lsm.
    
    Make sure BPF cookies are correct for fentry/fexit/fmod_ret/lsm.
    
    Signed-off-by: Kui-Feng Lee <kuifeng@fb.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220510205923.3206889-6-kuifeng@fb.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta bd3fac5447 selftests/bpf: Add attach bench test
Bugzilla: https://bugzilla.redhat.com/2120968

commit 5b6c7e5c44349b29c614e1b61f80c6849fc72ccf
Author: Jiri Olsa <jolsa@kernel.org>
Date:   Tue May 10 14:26:16 2022 +0200

    selftests/bpf: Add attach bench test
    
    Adding test that reads all functions from ftrace available_filter_functions
    file and attach them all through kprobe_multi API.
    
    It also prints stats info with -v option, like on my setup:
    
      test_bench_attach: found 48712 functions
      test_bench_attach: attached in   1.069s
      test_bench_attach: detached in   0.373s
    
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Link: https://lore.kernel.org/r/20220510122616.2652285-6-jolsa@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 10fc96f370 selftests/bpf: Add bpf link iter test
Bugzilla: https://bugzilla.redhat.com/2120968

commit 5a9b8e2c1ad44ade2f0e5419de223425bd380bda
Author: Dmitrii Dolgov <9erthalion6@gmail.com>
Date:   Tue May 10 17:52:33 2022 +0200

    selftests/bpf: Add bpf link iter test
    
    Add a simple test for bpf link iterator
    
    Signed-off-by: Dmitrii Dolgov <9erthalion6@gmail.com>
    Link: https://lore.kernel.org/r/20220510155233.9815-5-9erthalion6@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 3fa23313e4 selftests/bpf: Use ASSERT_* instead of CHECK
Bugzilla: https://bugzilla.redhat.com/2120968

commit f78625fdc95efeaac6deea5a4ed992dff7358c1e
Author: Dmitrii Dolgov <9erthalion6@gmail.com>
Date:   Tue May 10 17:52:32 2022 +0200

    selftests/bpf: Use ASSERT_* instead of CHECK
    
    Replace usage of CHECK with a corresponding ASSERT_* macro for bpf_iter
    tests. Only done if the final result is equivalent, no changes when
    replacement means loosing some information, e.g. from formatting string.
    
    Signed-off-by: Dmitrii Dolgov <9erthalion6@gmail.com>
    Link: https://lore.kernel.org/r/20220510155233.9815-4-9erthalion6@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 1d24ba84ac selftests/bpf: Fix result check for test_bpf_hash_map
Bugzilla: https://bugzilla.redhat.com/2120968

commit 6b2d16b6579acf63456817fda3bc9bf4a35c6a60
Author: Dmitrii Dolgov <9erthalion6@gmail.com>
Date:   Tue May 10 17:52:31 2022 +0200

    selftests/bpf: Fix result check for test_bpf_hash_map
    
    The original condition looks like a typo, verify the skeleton loading
    result instead.
    
    Signed-off-by: Dmitrii Dolgov <9erthalion6@gmail.com>
    Link: https://lore.kernel.org/r/20220510155233.9815-3-9erthalion6@gmail.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:02 +02:00
Yauheni Kaliuta 5f1fbe519b selftests/bpf: Replace bpf_trace_printk in tunnel kernel code
Bugzilla: https://bugzilla.redhat.com/2120968

commit 71b2ec21c3313e4cea38d5a6b009e99df30e540a
Author: Kaixi Fan <fankaixi.li@bytedance.com>
Date:   Sat Apr 30 15:48:44 2022 +0800

    selftests/bpf: Replace bpf_trace_printk in tunnel kernel code
    
    Replace bpf_trace_printk with bpf_printk in test_tunnel_kern.c.
    function bpf_printk is more easier and useful than bpf_trace_printk.
    
    Signed-off-by: Kaixi Fan <fankaixi.li@bytedance.com>
    Link: https://lore.kernel.org/r/20220430074844.69214-4-fankaixi.li@bytedance.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:02 +02:00
Yauheni Kaliuta 7ffe1c487d selftests/bpf: Move vxlan tunnel testcases to test_progs
Bugzilla: https://bugzilla.redhat.com/2120968

commit 1ee7efd40abf3ab01e67ff4be15d4385d5fa52c1
Author: Kaixi Fan <fankaixi.li@bytedance.com>
Date:   Sat Apr 30 15:48:43 2022 +0800

    selftests/bpf: Move vxlan tunnel testcases to test_progs
    
    Move vxlan tunnel testcases from test_tunnel.sh to test_progs.
    And add vxlan tunnel source testcases also. Other tunnel testcases
    will be moved to test_progs step by step in the future.
    Rename bpf program section name as SEC("tc") because test_progs
    bpf loader could not load sections with name SEC("gre_set_tunnel").
    Because of this, add bpftool to load bpf programs in test_tunnel.sh.
    
    Signed-off-by: Kaixi Fan <fankaixi.li@bytedance.com>
    Link: https://lore.kernel.org/r/20220430074844.69214-3-fankaixi.li@bytedance.com
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:02 +02:00
Yauheni Kaliuta 26babf3e29 selftests/bpf: Handle batch operations for map-in-map bpf-maps
Bugzilla: https://bugzilla.redhat.com/2120968

commit a82ebb093fc7bdd88f8df17b2fa303d7535fa43b
Author: Takshak Chahande <ctakshak@fb.com>
Date:   Tue May 10 01:22:21 2022 -0700

    selftests/bpf: Handle batch operations for map-in-map bpf-maps
    
    This patch adds up test cases that handles 4 combinations:
     a) outer map: BPF_MAP_TYPE_ARRAY_OF_MAPS
        inner maps: BPF_MAP_TYPE_ARRAY and BPF_MAP_TYPE_HASH
     b) outer map: BPF_MAP_TYPE_HASH_OF_MAPS
        inner maps: BPF_MAP_TYPE_ARRAY and BPF_MAP_TYPE_HASH
    
    Signed-off-by: Takshak Chahande <ctakshak@fb.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220510082221.2390540-2-ctakshak@fb.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:02 +02:00
Yauheni Kaliuta b04e893128 selftests/bpf: Test libbpf's ringbuf size fix up logic
Bugzilla: https://bugzilla.redhat.com/2120968

commit 7b3a06382442c4d83c9d35253638cb3f561da9b9
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Sun May 8 17:41:48 2022 -0700

    selftests/bpf: Test libbpf's ringbuf size fix up logic
    
    Make sure we always excercise libbpf's ringbuf map size adjustment logic
    by specifying non-zero size that's definitely not a page size multiple.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220509004148.1801791-10-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:02 +02:00
Yauheni Kaliuta 546a53212d libbpf: Provide barrier() and barrier_var() in bpf_helpers.h
Bugzilla: https://bugzilla.redhat.com/2120968

commit f760d0537925e2973ed3adc2e590aa2968d0e8dc
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Sun May 8 17:41:46 2022 -0700

    libbpf: Provide barrier() and barrier_var() in bpf_helpers.h
    
    Add barrier() and barrier_var() macros into bpf_helpers.h to be used by
    end users. While a bit advanced and specialized instruments, they are
    sometimes indispensable. Instead of requiring each user to figure out
    exact asm volatile incantations for themselves, provide them from
    bpf_helpers.h.
    
    Also remove conflicting definitions from selftests. Some tests rely on
    barrier_var() definition being nothing, those will still work as libbpf
    does the #ifndef/#endif guarding for barrier() and barrier_var(),
    allowing users to redefine them, if necessary.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220509004148.1801791-8-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:02 +02:00
Yauheni Kaliuta a9fda87d42 selftests/bpf: Add bpf_core_field_offset() tests
Bugzilla: https://bugzilla.redhat.com/2120968

commit 785c3342cf6c520250258d8d7bc0cae1d4461dc8
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Sun May 8 17:41:45 2022 -0700

    selftests/bpf: Add bpf_core_field_offset() tests
    
    Add test cases for bpf_core_field_offset() helper.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220509004148.1801791-7-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:01 +02:00
Yauheni Kaliuta b51940fffe selftests/bpf: Use both syntaxes for field-based CO-RE helpers
Bugzilla: https://bugzilla.redhat.com/2120968

commit 2a4ca46b7d2a6f7ba7359e8d7fafe9ad378fa18e
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Sun May 8 17:41:43 2022 -0700

    selftests/bpf: Use both syntaxes for field-based CO-RE helpers
    
    Excercise both supported forms of bpf_core_field_exists() and
    bpf_core_field_size() helpers: variable-based field reference and
    type/field name-based one.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220509004148.1801791-5-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:01 +02:00
Yauheni Kaliuta 1f51bacb02 selftests/bpf: Fix two memory leaks in prog_tests
Bugzilla: https://bugzilla.redhat.com/2120968

commit 20b87e7c29dffcfa3f96f2e99daec84fd46cabdb
Author: Mykola Lysenko <mykolal@fb.com>
Date:   Thu Apr 28 15:57:44 2022 -0700

    selftests/bpf: Fix two memory leaks in prog_tests
    
    Fix log_fp memory leak in dispatch_thread_read_log.
    Remove obsolete log_fp clean-up code in dispatch_thread.
    
    Also, release memory of subtest_selector. This can be
    reproduced with -n 2/1 parameters.
    
    Signed-off-by: Mykola Lysenko <mykolal@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220428225744.1961643-1-mykolal@fb.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:01 +02:00
Yauheni Kaliuta c67fcf722c selftests/bpf: Test bpf_map__set_autocreate() and related log fixup logic
Bugzilla: https://bugzilla.redhat.com/2120968

commit 68964e155677ab6eca21784a248b8e65fb745660
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Wed Apr 27 21:15:23 2022 -0700

    selftests/bpf: Test bpf_map__set_autocreate() and related log fixup logic
    
    Add a subtest that excercises bpf_map__set_autocreate() API and
    validates that libbpf properly fixes up BPF verifier log with correct
    map information.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220428041523.4089853-5-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:01 +02:00
Yauheni Kaliuta 7d5a4e8db2 selftests/bpf: Use target-less SEC() definitions in various tests
Bugzilla: https://bugzilla.redhat.com/2120968

commit 32c03c4954a03d46f603f94acac9d2705bd5c9c6
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Thu Apr 28 11:53:49 2022 -0700

    selftests/bpf: Use target-less SEC() definitions in various tests
    
    Add new or modify existing SEC() definitions to be target-less and
    validate that libbpf handles such program definitions correctly.
    
    For kprobe/kretprobe we also add explicit test that generic
    bpf_program__attach() works in cases when kprobe definition contains
    proper target. It wasn't previously tested as selftests code always
    explicitly specified the target regardless.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Song Liu <songliubraving@fb.com>
    Link: https://lore.kernel.org/bpf/20220428185349.3799599-4-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:01 +02:00
Yauheni Kaliuta 9cdf578cc7 bpf/selftests: Add granular subtest output for prog_test
Bugzilla: https://bugzilla.redhat.com/2120968

commit 0925225956bbef863d51ee882d4d20c9a9c90db2
Author: Mykola Lysenko <mykolal@fb.com>
Date:   Tue Apr 26 21:13:53 2022 -0700

    bpf/selftests: Add granular subtest output for prog_test
    
    Implement per subtest log collection for both parallel
    and sequential test execution. This allows granular
    per-subtest error output in the 'All error logs' section.
    Add subtest log transfer into the protocol during the
    parallel test execution.
    
    Move all test log printing logic into dump_test_log
    function. One exception is the output of test names when
    verbose printing is enabled. Move test name/result
    printing into separate functions to avoid repetition.
    
    Print all successful subtest results in the log. Print
    only failed test logs when test does not have subtests.
    Or only failed subtests' logs when test has subtests.
    
    Disable 'All error logs' output when verbose mode is
    enabled. This functionality was already broken and is
    causing confusion.
    
    Signed-off-by: Mykola Lysenko <mykolal@fb.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220427041353.246007-1-mykolal@fb.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:00 +02:00
Yauheni Kaliuta fbfa51ddc8 selftests/bpf: Add libbpf's log fixup logic selftests
Bugzilla: https://bugzilla.redhat.com/2120968

commit ea4128eb43eb3fe856831eaa9f747fab350ed5f3
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Mon Apr 25 17:45:11 2022 -0700

    selftests/bpf: Add libbpf's log fixup logic selftests
    
    Add tests validating that libbpf is indeed patching up BPF verifier log
    with CO-RE relocation details. Also test partial and full truncation
    scenarios.
    
    This test might be a bit fragile due to changing BPF verifier log
    format. If that proves to be frequently breaking, we can simplify tests
    or remove the truncation subtests. But for now it seems useful to test
    it in those conditions that are otherwise rarely occuring in practice.
    
    Also test CO-RE relo failure in a subprog as that excercises subprogram CO-RE
    relocation mapping logic which doesn't work out of the box without extra
    relo storage previously done only for gen_loader case.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220426004511.2691730-11-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:00 +02:00
Yauheni Kaliuta 94c344186d selftests/bpf: Add CO-RE relos and SEC("?...") to linked_funcs selftests
Bugzilla: https://bugzilla.redhat.com/2120968

commit b82bb1ffbb9a20032853ef4e0d5b8f37c6ae7c25
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Mon Apr 25 17:45:06 2022 -0700

    selftests/bpf: Add CO-RE relos and SEC("?...") to linked_funcs selftests
    
    Enhance linked_funcs selftest with two tricky features that might not
    obviously work correctly together. We add CO-RE relocations to entry BPF
    programs and mark those programs as non-autoloadable with SEC("?...")
    annotation. This makes sure that libbpf itself handles .BTF.ext CO-RE
    relocation data matching correctly for SEC("?...") programs, as well as
    ensures that BPF static linker handles this correctly (this was the case
    before, no changes are necessary, but it wasn't explicitly tested).
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220426004511.2691730-6-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:00 +02:00
Yauheni Kaliuta 3dc687261c selftests/bpf: Add test for strict BTF type check
Bugzilla: https://bugzilla.redhat.com/2120968

commit 792c0a345f0eb2a6bb12afcca1cf6e518bf57b43
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Mon Apr 25 03:19:01 2022 +0530

    selftests/bpf: Add test for strict BTF type check
    
    Ensure that the edge case where first member type was matched
    successfully even if it didn't match BTF type of register is caught and
    rejected by the verifier.
    
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220424214901.2743946-14-memxor@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:46:59 +02:00
Yauheni Kaliuta d494284b72 selftests/bpf: Add verifier tests for kptr
Bugzilla: https://bugzilla.redhat.com/2120968

commit 05a945deefaa9fe6d34f06f0ab0cbfc72e2dbfa0
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Mon Apr 25 03:19:00 2022 +0530

    selftests/bpf: Add verifier tests for kptr
    
    Reuse bpf_prog_test functions to test the support for PTR_TO_BTF_ID in
    BPF map case, including some tests that verify implementation sanity and
    corner cases.
    
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220424214901.2743946-13-memxor@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:46:59 +02:00
Yauheni Kaliuta 16b2648c7f selftests/bpf: Add C tests for kptr
Bugzilla: https://bugzilla.redhat.com/2120968

commit 2cbc469a6fc345651569f9570b899af3b005cf80
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Mon Apr 25 03:18:59 2022 +0530

    selftests/bpf: Add C tests for kptr
    
    This uses the __kptr and __kptr_ref macros as well, and tries to test
    the stuff that is supposed to work, since we have negative tests in
    test_verifier suite. Also include some code to test map-in-map support,
    such that the inner_map_meta matches the kptr_off_tab of map added as
    element.
    
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220424214901.2743946-12-memxor@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:46:59 +02:00
Yauheni Kaliuta 6e36eccfc4 bpf: Tag argument to be released in bpf_func_proto
Bugzilla: https://bugzilla.redhat.com/2120968

commit 8f14852e89113d738c99c375b4c8b8b7e1073df1
Author: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Date:   Mon Apr 25 03:18:50 2022 +0530

    bpf: Tag argument to be released in bpf_func_proto
    
    Add a new type flag for bpf_arg_type that when set tells verifier that
    for a release function, that argument's register will be the one for
    which meta.ref_obj_id will be set, and which will then be released
    using release_reference. To capture the regno, introduce a new field
    release_regno in bpf_call_arg_meta.
    
    This would be required in the next patch, where we may either pass NULL
    or a refcounted pointer as an argument to the release function
    bpf_kptr_xchg. Just releasing only when meta.ref_obj_id is set is not
    enough, as there is a case where the type of argument needed matches,
    but the ref_obj_id is set to 0. Hence, we must enforce that whenever
    meta.ref_obj_id is zero, the register that is to be released can only
    be NULL for a release function.
    
    Since we now indicate whether an argument is to be released in
    bpf_func_proto itself, is_release_function helper has lost its utitlity,
    hence refactor code to work without it, and just rely on
    meta.release_regno to know when to release state for a ref_obj_id.
    Still, the restriction of one release argument and only one ref_obj_id
    passed to BPF helper or kfunc remains. This may be lifted in the future.
    
    Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>
    Link: https://lore.kernel.org/bpf/20220424214901.2743946-3-memxor@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-28 16:52:11 +02:00