Commit Graph

30046 Commits

Author SHA1 Message Date
Yauheni Kaliuta 002bc665cb Revert "bpftool: Use libbpf 1.0 API mode instead of RLIMIT_MEMLOCK"
Bugzilla: https://bugzilla.redhat.com/2120968

commit 6b4384ff108874cf336fe2fb1633313c2c7620bf
Author: Quentin Monnet <quentin@isovalent.com>
Date:   Fri Jun 10 12:26:47 2022 +0100

    Revert "bpftool: Use libbpf 1.0 API mode instead of RLIMIT_MEMLOCK"
    
    This reverts commit a777e18f1bcd32528ff5dfd10a6629b655b05eb8.
    
    In commit a777e18f1bcd ("bpftool: Use libbpf 1.0 API mode instead of
    RLIMIT_MEMLOCK"), we removed the rlimit bump in bpftool, because the
    kernel has switched to memcg-based memory accounting. Thanks to the
    LIBBPF_STRICT_AUTO_RLIMIT_MEMLOCK, we attempted to keep compatibility
    with other systems and ask libbpf to raise the limit for us if
    necessary.
    
    How do we know if memcg-based accounting is supported? There is a probe
    in libbpf to check this. But this probe currently relies on the
    availability of a given BPF helper, bpf_ktime_get_coarse_ns(), which
    landed in the same kernel version as the memory accounting change. This
    works in the generic case, but it may fail, for example, if the helper
    function has been backported to an older kernel. This has been observed
    for Google Cloud's Container-Optimized OS (COS), where the helper is
    available but rlimit is still in use. The probe succeeds, the rlimit is
    not raised, and probing features with bpftool, for example, fails.
    
    A patch was submitted [0] to update this probe in libbpf, based on what
    the cilium/ebpf Go library does [1]. It would lower the soft rlimit to
    0, attempt to load a BPF object, and reset the rlimit. But it may induce
    some hard-to-debug flakiness if another process starts, or the current
    application is killed, while the rlimit is reduced, and the approach was
    discarded.
    
    As a workaround to ensure that the rlimit bump does not depend on the
    availability of a given helper, we restore the unconditional rlimit bump
    in bpftool for now.
    
      [0] https://lore.kernel.org/bpf/20220609143614.97837-1-quentin@isovalent.com/
      [1] https://github.com/cilium/ebpf/blob/v0.9.0/rlimit/rlimit.go#L39
    
    Signed-off-by: Quentin Monnet <quentin@isovalent.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Yafang Shao <laoar.shao@gmail.com>
    Cc: Stanislav Fomichev <sdf@google.com>
    Link: https://lore.kernel.org/bpf/20220610112648.29695-2-quentin@isovalent.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:07 +02:00
Yauheni Kaliuta 6193c840a6 libbpf: Fix uprobe symbol file offset calculation logic
Bugzilla: https://bugzilla.redhat.com/2120968

commit fe92833524e368e59bba9c57e00f7359f133667f
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Mon Jun 6 15:01:43 2022 -0700

    libbpf: Fix uprobe symbol file offset calculation logic
    
    Fix libbpf's bpf_program__attach_uprobe() logic of determining
    function's *file offset* (which is what kernel is actually expecting)
    when attaching uprobe/uretprobe by function name. Previously calculation
    was determining virtual address offset relative to base load address,
    which (offset) is not always the same as file offset (though very
    frequently it is which is why this went unnoticed for a while).
    
    Fixes: 433966e3ae04 ("libbpf: Support function name-based attach uprobes")
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Cc: Riham Selim <rihams@fb.com>
    Cc: Alan Maguire <alan.maguire@oracle.com>
    Link: https://lore.kernel.org/bpf/20220606220143.3796908-1-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:07 +02:00
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 23969fb532 libbpf: Fix is_pow_of_2
Bugzilla: https://bugzilla.redhat.com/2120968

commit 611edf1bacc51355ccb497915695db7f869cb382
Author: Yuze Chi <chiyuze@google.com>
Date:   Thu Jun 2 22:51:56 2022 -0700

    libbpf: Fix is_pow_of_2
    
    Move the correct definition from linker.c into libbpf_internal.h.
    
    Fixes: 0087a681fa8c ("libbpf: Automatically fix up BPF_MAP_TYPE_RINGBUF size, if necessary")
    Reported-by: Yuze Chi <chiyuze@google.com>
    Signed-off-by: Yuze Chi <chiyuze@google.com>
    Signed-off-by: Ian Rogers <irogers@google.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220603055156.2830463-1-irogers@google.com

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 a4778555c5 bpf: Add dynptr data slices
Bugzilla: https://bugzilla.redhat.com/2120968

commit 34d4ef5775f776ec4b0d53a02d588bf3195cada6
Author: Joanne Koong <joannelkoong@gmail.com>
Date:   Mon May 23 14:07:11 2022 -0700

    bpf: Add dynptr data slices
    
    This patch adds a new helper function
    
    void *bpf_dynptr_data(struct bpf_dynptr *ptr, u32 offset, u32 len);
    
    which returns a pointer to the underlying data of a dynptr. *len*
    must be a statically known value. The bpf program may access the returned
    data slice as a normal buffer (eg can do direct reads and writes), since
    the verifier associates the length with the returned pointer, and
    enforces that no out of bounds accesses occur.
    
    Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Yonghong Song <yhs@fb.com>
    Link: https://lore.kernel.org/bpf/20220523210712.3641569-6-joannelkoong@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta db083fdfd1 bpf: Add bpf_dynptr_read and bpf_dynptr_write
Bugzilla: https://bugzilla.redhat.com/2120968

commit 13bbbfbea7598ea9f8d9c3d73bf053bb57f9c4b2
Author: Joanne Koong <joannelkoong@gmail.com>
Date:   Mon May 23 14:07:10 2022 -0700

    bpf: Add bpf_dynptr_read and bpf_dynptr_write
    
    This patch adds two helper functions, bpf_dynptr_read and
    bpf_dynptr_write:
    
    long bpf_dynptr_read(void *dst, u32 len, struct bpf_dynptr *src, u32 offset);
    
    long bpf_dynptr_write(struct bpf_dynptr *dst, u32 offset, void *src, u32 len);
    
    The dynptr passed into these functions must be valid dynptrs that have
    been initialized.
    
    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-5-joannelkoong@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta b08a7de6e2 bpf: Dynptr support for ring buffers
Bugzilla: https://bugzilla.redhat.com/2120968

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

    bpf: Dynptr support for ring buffers
    
    Currently, our only way of writing dynamically-sized data into a ring
    buffer is through bpf_ringbuf_output but this incurs an extra memcpy
    cost. bpf_ringbuf_reserve + bpf_ringbuf_commit avoids this extra
    memcpy, but it can only safely support reservation sizes that are
    statically known since the verifier cannot guarantee that the bpf
    program won’t access memory outside the reserved space.
    
    The bpf_dynptr abstraction allows for dynamically-sized ring buffer
    reservations without the extra memcpy.
    
    There are 3 new APIs:
    
    long bpf_ringbuf_reserve_dynptr(void *ringbuf, u32 size, u64 flags, struct bpf_dynptr *ptr);
    void bpf_ringbuf_submit_dynptr(struct bpf_dynptr *ptr, u64 flags);
    void bpf_ringbuf_discard_dynptr(struct bpf_dynptr *ptr, u64 flags);
    
    These closely follow the functionalities of the original ringbuf APIs.
    For example, all ringbuffer dynptrs that have been reserved must be
    either submitted or discarded before the program exits.
    
    Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: David Vernet <void@manifault.com>
    Link: https://lore.kernel.org/bpf/20220523210712.3641569-4-joannelkoong@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta dc363a11c4 bpf: Add bpf_dynptr_from_mem for local dynptrs
Bugzilla: https://bugzilla.redhat.com/2120968

commit 263ae152e96253f40c2c276faad8629e096b3bad
Author: Joanne Koong <joannelkoong@gmail.com>
Date:   Mon May 23 14:07:08 2022 -0700

    bpf: Add bpf_dynptr_from_mem for local dynptrs
    
    This patch adds a new api bpf_dynptr_from_mem:
    
    long bpf_dynptr_from_mem(void *data, u32 size, u64 flags, struct bpf_dynptr *ptr);
    
    which initializes a dynptr to point to a bpf program's local memory. For now
    only local memory that is of reg type PTR_TO_MAP_VALUE is supported.
    
    Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220523210712.3641569-3-joannelkoong@gmail.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:06 +02:00
Yauheni Kaliuta 251a3a0808 bpf: Add verifier support for dynptrs
Bugzilla: https://bugzilla.redhat.com/2120968

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

    bpf: Add verifier support for dynptrs
    
    This patch adds the bulk of the verifier work for supporting dynamic
    pointers (dynptrs) in bpf.
    
    A bpf_dynptr is opaque to the bpf program. It is a 16-byte structure
    defined internally as:
    
    struct bpf_dynptr_kern {
        void *data;
        u32 size;
        u32 offset;
    } __aligned(8);
    
    The upper 8 bits of *size* is reserved (it contains extra metadata about
    read-only status and dynptr type). Consequently, a dynptr only supports
    memory less than 16 MB.
    
    There are different types of dynptrs (eg malloc, ringbuf, ...). In this
    patchset, the most basic one, dynptrs to a bpf program's local memory,
    is added. For now only local memory that is of reg type PTR_TO_MAP_VALUE
    is supported.
    
    In the verifier, dynptr state information will be tracked in stack
    slots. When the program passes in an uninitialized dynptr
    (ARG_PTR_TO_DYNPTR | MEM_UNINIT), the stack slots corresponding
    to the frame pointer where the dynptr resides at are marked
    STACK_DYNPTR. For helper functions that take in initialized dynptrs (eg
    bpf_dynptr_read + bpf_dynptr_write which are added later in this
    patchset), the verifier enforces that the dynptr has been initialized
    properly by checking that their corresponding stack slots have been
    marked as STACK_DYNPTR.
    
    The 6th patch in this patchset adds test cases that the verifier should
    successfully reject, such as for example attempting to use a dynptr
    after doing a direct write into it inside the bpf program.
    
    Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: David Vernet <void@manifault.com>
    Link: https://lore.kernel.org/bpf/20220523210712.3641569-2-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 c4cfa2bb92 libbpf: Fix typo in comment
Bugzilla: https://bugzilla.redhat.com/2120968

commit bb412cf1d712656f27b2a08c492ed9d7591485aa
Author: Julia Lawall <Julia.Lawall@inria.fr>
Date:   Sat May 21 13:11:21 2022 +0200

    libbpf: Fix typo in comment
    
    Spelling mistake (triple letters) in comment.
    Detected with the help of Coccinelle.
    
    Signed-off-by: Julia Lawall <Julia.Lawall@inria.fr>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: Daniel Müller <deso@posteo.net>
    Link: https://lore.kernel.org/bpf/20220521111145.81697-71-Julia.Lawall@inria.fr

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 7dcd07e6dc bpf: Add bpf_skc_to_mptcp_sock_proto
Bugzilla: https://bugzilla.redhat.com/2120968

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

    bpf: Add bpf_skc_to_mptcp_sock_proto
    
    This patch implements a new struct bpf_func_proto, named
    bpf_skc_to_mptcp_sock_proto. Define a new bpf_id BTF_SOCK_TYPE_MPTCP,
    and a new helper bpf_skc_to_mptcp_sock(), which invokes another new
    helper bpf_mptcp_sock_from_subflow() in net/mptcp/bpf.c to get struct
    mptcp_sock from a given subflow socket.
    
    v2: Emit BTF type, add func_id checks in verifier.c and bpf_trace.c,
    remove build check for CONFIG_BPF_JIT
    v5: Drop EXPORT_SYMBOL (Martin)
    
    Co-developed-by: Nicolas Rybowski <nicolas.rybowski@tessares.net>
    Co-developed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    Signed-off-by: Nicolas Rybowski <nicolas.rybowski@tessares.net>
    Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
    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>
    Link: https://lore.kernel.org/bpf/20220519233016.105670-2-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 8999afe42a libbpf: remove bpf_create_map*() APIs
Bugzilla: https://bugzilla.redhat.com/2120968

commit d16495a982324f75e8e65de01475f9533de1db7a
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Wed May 18 11:59:15 2022 -0700

    libbpf: remove bpf_create_map*() APIs
    
    To test API removal, get rid of bpf_create_map*() APIs. Perf defines
    __weak implementation of bpf_map_create() that redirects to old
    bpf_create_map() and that seems to compile and run fine.
    
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20220518185915.3529475-4-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta 1179ec9831 libbpf: start 1.0 development cycle
Bugzilla: https://bugzilla.redhat.com/2120968

commit e2371b1632b1c61c1fa726a17b82e6833a9e4d85
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Wed May 18 11:59:14 2022 -0700

    libbpf: start 1.0 development cycle
    
    Start libbpf 1.0 development cycle by adding LIBBPF_1.0.0 section to
    libbpf.map file and marking all current symbols as local. As we remove
    all the deprecated APIs we'll populate global list before the final 1.0
    release.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20220518185915.3529475-3-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:05 +02:00
Yauheni Kaliuta e42f73f6ee libbpf: fix up global symbol counting logic
Bugzilla: https://bugzilla.redhat.com/2120968

commit 056431ae4d790efd0372c1daf93569fdd2814190
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Wed May 18 11:59:13 2022 -0700

    libbpf: fix up global symbol counting logic
    
    Add the same negative ABS filter that we use in VERSIONED_SYM_COUNT to
    filter out ABS symbols like LIBBPF_0.8.0.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/r/20220518185915.3529475-2-andrii@kernel.org
    Signed-off-by: Alexei Starovoitov <ast@kernel.org>

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 fe368a2b5a libbpf: fix memory leak in attach_tp for target-less tracepoint program
Bugzilla: https://bugzilla.redhat.com/2120968

commit ac6a65868a5a45db49d5ee8524df3b701110d844
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Mon May 16 11:45:47 2022 -0700

    libbpf: fix memory leak in attach_tp for target-less tracepoint program
    
    Fix sec_name memory leak if user defines target-less SEC("tp").
    
    Fixes: 9af8efc45eb1 ("libbpf: Allow "incomplete" basic tracing SEC() definitions")
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Acked-by: David Vernet <void@manifault.com>
    Link: https://lore.kernel.org/r/20220516184547.3204674-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 35725a8afd bpftool: Use sysfs vmlinux when dumping BTF by ID
Bugzilla: https://bugzilla.redhat.com/2120968

commit 418fbe82578e2889dcc2c0ae4d367ea4e28dd05c
Author: Larysa Zaremba <larysa.zaremba@intel.com>
Date:   Fri May 13 14:17:43 2022 +0200

    bpftool: Use sysfs vmlinux when dumping BTF by ID
    
    Currently, dumping almost all BTFs specified by id requires
    using the -B option to pass the base BTF. For kernel module
    BTFs the vmlinux BTF sysfs path should work.
    
    This patch simplifies dumping by ID usage by loading
    vmlinux BTF from sysfs as base, if base BTF was not specified
    and the ID corresponds to a kernel module BTF.
    
    Signed-off-by: Larysa Zaremba <larysa.zaremba@intel.com>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Reviewed-by: Alexander Lobakin <alexandr.lobakin@intel.com>
    Link: https://lore.kernel.org/bpf/20220513121743.12411-1-larysa.zaremba@intel.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 7b1740d9da libbpf: Add safer high-level wrappers for map operations
Bugzilla: https://bugzilla.redhat.com/2120968

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

    libbpf: Add safer high-level wrappers for map operations
    
    Add high-level API wrappers for most common and typical BPF map
    operations that works directly on instances of struct bpf_map * (so
    you don't have to call bpf_map__fd()) and validate key/value size
    expectations.
    
    These helpers require users to specify key (and value, where
    appropriate) sizes when performing lookup/update/delete/etc. This forces
    user to actually think and validate (for themselves) those. This is
    a good thing as user is expected by kernel to implicitly provide correct
    key/value buffer sizes and kernel will just read/write necessary amount
    of data. If it so happens that user doesn't set up buffers correctly
    (which bit people for per-CPU maps especially) kernel either randomly
    overwrites stack data or return -EFAULT, depending on user's luck and
    circumstances. These high-level APIs are meant to prevent such
    unpleasant and hard to debug bugs.
    
    This patch also adds bpf_map_delete_elem_flags() low-level API and
    requires passing flags to bpf_map__delete_elem() API for consistency
    across all similar APIs, even though currently kernel doesn't expect
    any extra flags for BPF_MAP_DELETE_ELEM operation.
    
    List of map operations that get these high-level APIs:
    
      - bpf_map_lookup_elem;
      - bpf_map_update_elem;
      - bpf_map_delete_elem;
      - bpf_map_lookup_and_delete_elem;
      - bpf_map_get_next_key.
    
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220512220713.2617964-1-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 c0c280946f bpf: add bpf_map_lookup_percpu_elem for percpu map
Bugzilla: https://bugzilla.redhat.com/2120968

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

    bpf: add bpf_map_lookup_percpu_elem for percpu map
    
    Add new ebpf helpers bpf_map_lookup_percpu_elem.
    
    The implementation method is relatively simple, refer to the implementation
    method of map_lookup_elem of percpu map, increase the parameters of cpu, and
    obtain it according to the specified cpu.
    
    Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com>
    Link: https://lore.kernel.org/r/20220511093854.411-2-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 778d04d8eb libbpf: Assign cookies to links in libbpf.
Bugzilla: https://bugzilla.redhat.com/2120968

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

    libbpf: Assign cookies to links in libbpf.
    
    Add a cookie field to the attributes of bpf_link_create().
    Add bpf_program__attach_trace_opts() to attach a cookie to a link.
    
    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-5-kuifeng@fb.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 1c3a7dd065 bpf, x86: Attach a cookie to fentry/fexit/fmod_ret/lsm.
Bugzilla: https://bugzilla.redhat.com/2120968

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

    bpf, x86: Attach a cookie to fentry/fexit/fmod_ret/lsm.
    
    Pass a cookie along with BPF_LINK_CREATE requests.
    
    Add a bpf_cookie field to struct bpf_tracing_link to attach a cookie.
    The cookie of a bpf_tracing_link is available by calling
    bpf_get_attach_cookie when running the BPF program of the attached
    link.
    
    The value of a cookie will be set at bpf_tramp_run_ctx by the
    trampoline of the link.
    
    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-4-kuifeng@fb.com

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 278de3770c libbpf: Add bpf_program__set_insns function
Bugzilla: https://bugzilla.redhat.com/2120968

commit b63b3c490eeeedd324e194929bd0aa8ba553f875
Author: Jiri Olsa <jolsa@kernel.org>
Date:   Tue May 10 09:46:57 2022 +0200

    libbpf: Add bpf_program__set_insns function
    
    Adding bpf_program__set_insns that allows to set new instructions
    for a BPF program.
    
    This is a very advanced libbpf API and users need to know what
    they are doing. This should be used from prog_prepare_load_fn
    callback only.
    
    We can have changed instructions after calling prog_prepare_load_fn
    callback, reloading them.
    
    One of the users of this new API will be perf's internal BPF prologue
    generation.
    
    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Acked-by: Andrii Nakryiko <andrii@kernel.org>
    Link: https://lore.kernel.org/bpf/20220510074659.2557731-2-jolsa@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00
Yauheni Kaliuta 3064622c71 libbpf: Clean up ringbuf size adjustment implementation
Bugzilla: https://bugzilla.redhat.com/2120968

commit 5eefe17c7ae41bac4d2d281669e8357a10f4d5a4
Author: Andrii Nakryiko <andrii@kernel.org>
Date:   Tue May 10 11:51:59 2022 -0700

    libbpf: Clean up ringbuf size adjustment implementation
    
    Drop unused iteration variable, move overflow prevention check into the
    for loop.
    
    Fixes: 0087a681fa8c ("libbpf: Automatically fix up BPF_MAP_TYPE_RINGBUF size, if necessary")
    Reported-by: Nathan Chancellor <nathan@kernel.org>
    Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20220510185159.754299-1-andrii@kernel.org

Signed-off-by: Yauheni Kaliuta <ykaliuta@redhat.com>
2022-11-30 12:47:03 +02:00