linux_dsm_epyc7002/tools/testing/selftests/bpf
Ilya Leoshkevich bda2e0a03c selftests/bpf: Fix test_core_autosize on big-endian machines
[ Upstream commit d164dd9a5c08c16a883b3de97d13948c7be7fa4d ]

The "probed" part of test_core_autosize copies an integer using
bpf_core_read() into an integer of a potentially different size.
On big-endian machines a destination offset is required for this to
produce a sensible result.

Fixes: 888d83b961 ("selftests/bpf: Validate libbpf's auto-sizing of LD/ST/STX instructions")
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20210812224814.187460-1-iii@linux.ibm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-07-05 19:11:56 +02:00
..
benchs selftests: Remove fmod_ret from test_overhead 2020-09-28 17:20:28 -07:00
gnu
map_tests
prog_tests selftests/bpf: Fix core_reloc test runner 2021-05-14 09:50:44 +02:00
progs selftests/bpf: Fix test_core_autosize on big-endian machines 2024-07-05 19:11:56 +02:00
verifier selftest/bpf: Verifier tests for var-off access 2024-07-05 18:07:51 +02:00
.gitignore selftests/bpf: Whitelist test_progs.h from .gitignore 2021-07-14 16:56:23 +02:00
bench.c selftests: Remove fmod_ret from test_overhead 2020-09-28 17:20:28 -07:00
bench.h
bpf_legacy.h
bpf_rand.h
bpf_rlimit.h
bpf_tcp_helpers.h bpf: selftest: Add test_btf_skc_cls_ingress 2020-09-25 13:58:02 -07:00
bpf_util.h
cgroup_helpers.c
cgroup_helpers.h
config
flow_dissector_load.c
flow_dissector_load.h selftests/bpf: Don't use deprecated libbpf APIs 2020-09-03 17:14:40 -07:00
get_cgroup_id_user.c
Makefile selftests/bpf: Re-generate vmlinux.h and BPF skeletons if bpftool changed 2021-05-14 09:50:30 +02:00
netcnt_common.h
network_helpers.c bpf: selftests: Add fastopen_connect to network_helpers 2020-08-24 14:35:00 -07:00
network_helpers.h bpf: selftests: Add fastopen_connect to network_helpers 2020-08-24 14:35:00 -07:00
README.rst selftests/bpf: Add profiler test 2020-10-09 22:03:06 +02:00
settings
tcp_client.py
tcp_server.py
test_bpftool_build.sh selftests, bpftool: Add bpftool (and eBPF helpers) documentation build 2020-09-10 11:02:45 -07:00
test_bpftool_metadata.sh selftests/bpf: Test load and dump metadata with btftool and skel 2020-09-15 18:28:27 -07:00
test_bpftool.py
test_bpftool.sh
test_btf.h
test_cgroup_storage.c
test_cpp.cpp
test_current_pid_tgid_new_ns.c selftests/bpf: Fix two minor compilation warnings reported by GCC 4.9 2020-08-20 16:45:09 +02:00
test_dev_cgroup.c
test_flow_dissector.c
test_flow_dissector.sh
test_ftrace.sh
test_iptunnel_common.h
test_kmod.sh
test_lirc_mode2_user.c
test_lirc_mode2.sh
test_lpm_map.c
test_lru_map.c
test_lwt_ip_encap.sh
test_lwt_seg6local.sh
test_maps.c selftests/bpf: Fix massive output from test_maps 2020-08-28 13:58:19 +02:00
test_maps.h
test_netcnt.c
test_offload.py tweewide: Fix most Shebang lines 2021-05-22 11:40:55 +02:00
test_progs.c selftests/bpf: Fix test_progs-flavor run getting number of tests 2020-08-24 21:09:24 -07:00
test_progs.h selftests/bpf: Move and extend ASSERT_xxx() testing macros 2020-09-29 12:21:23 -07:00
test_select_reuseport_common.h
test_skb_cgroup_id_user.c
test_skb_cgroup_id.sh
test_sock_addr.c
test_sock_addr.sh
test_sock.c
test_socket_cookie.c selftests/bpf: Don't use deprecated libbpf APIs 2020-09-03 17:14:40 -07:00
test_sockmap.c selftests/bpf: Fix invalid use of strncat in test_sockmap 2020-12-30 11:53:34 +01:00
test_stub.c
test_sysctl.c
test_tag.c
test_tc_edt.sh
test_tc_redirect.sh bpf, selftests: Extend test_tc_redirect to use modified bpf_redirect_neigh() 2020-10-22 01:30:00 +02:00
test_tc_tunnel.sh
test_tcp_check_syncookie_user.c
test_tcp_check_syncookie.sh
test_tcp_hdr_options.h bpf: selftest: Ensure the child sk inherited all bpf_sock_ops_cb_flags 2020-10-02 11:34:48 -07:00
test_tcpbpf_user.c
test_tcpbpf.h
test_tcpnotify_user.c
test_tcpnotify.h
test_tunnel.sh selftest/bpf: Add missed ip6ip6 test back 2020-12-30 11:53:07 +01:00
test_verifier_log.c
test_verifier.c bpf, selftests: Adjust few selftest outcomes wrt unreachable code 2024-07-05 18:07:51 +02:00
test_xdp_meta.sh
test_xdp_redirect.sh selftests/bpf: Convert test_xdp_redirect.sh to bash 2021-03-04 11:37:30 +01:00
test_xdp_veth.sh
test_xdp_vlan_mode_generic.sh
test_xdp_vlan_mode_native.sh
test_xdp_vlan.sh
test_xdping.sh
testing_helpers.c
testing_helpers.h
trace_helpers.c selftests/bpf: Ksyms_btf to test typed ksyms 2020-10-02 14:59:25 -07:00
trace_helpers.h selftests/bpf: Ksyms_btf to test typed ksyms 2020-10-02 14:59:25 -07:00
urandom_read.c
with_addr.sh
with_tunnels.sh
xdping.c
xdping.h

==================
BPF Selftest Notes
==================
General instructions on running selftests can be found in
`Documentation/bpf/bpf_devel_QA.rst`_.

Additional information about selftest failures are
documented here.

profiler[23] test failures with clang/llvm <12.0.0
==================================================

With clang/llvm <12.0.0, the profiler[23] test may fail.
The symptom looks like

.. code-block:: c

  // r9 is a pointer to map_value
  // r7 is a scalar
  17:       bf 96 00 00 00 00 00 00 r6 = r9
  18:       0f 76 00 00 00 00 00 00 r6 += r7
  math between map_value pointer and register with unbounded min value is not allowed

  // the instructions below will not be seen in the verifier log
  19:       a5 07 01 00 01 01 00 00 if r7 < 257 goto +1
  20:       bf 96 00 00 00 00 00 00 r6 = r9
  // r6 is used here

The verifier will reject such code with above error.
At insn 18 the r7 is indeed unbounded. The later insn 19 checks the bounds and
the insn 20 undoes map_value addition. It is currently impossible for the
verifier to understand such speculative pointer arithmetic.
Hence
    https://reviews.llvm.org/D85570
addresses it on the compiler side. It was committed on llvm 12.

The corresponding C code
.. code-block:: c

  for (int i = 0; i < MAX_CGROUPS_PATH_DEPTH; i++) {
          filepart_length = bpf_probe_read_str(payload, ...);
          if (filepart_length <= MAX_PATH) {
                  barrier_var(filepart_length); // workaround
                  payload += filepart_length;
          }
  }

bpf_iter test failures with clang/llvm 10.0.0
=============================================

With clang/llvm 10.0.0, the following two bpf_iter tests failed:
  * ``bpf_iter/ipv6_route``
  * ``bpf_iter/netlink``

The symptom for ``bpf_iter/ipv6_route`` looks like

.. code-block:: c

  2: (79) r8 = *(u64 *)(r1 +8)
  ...
  14: (bf) r2 = r8
  15: (0f) r2 += r1
  ; BPF_SEQ_PRINTF(seq, "%pi6 %02x ", &rt->fib6_dst.addr, rt->fib6_dst.plen);
  16: (7b) *(u64 *)(r8 +64) = r2
  only read is supported

The symptom for ``bpf_iter/netlink`` looks like

.. code-block:: c

  ; struct netlink_sock *nlk = ctx->sk;
  2: (79) r7 = *(u64 *)(r1 +8)
  ...
  15: (bf) r2 = r7
  16: (0f) r2 += r1
  ; BPF_SEQ_PRINTF(seq, "%pK %-3d ", s, s->sk_protocol);
  17: (7b) *(u64 *)(r7 +0) = r2
  only read is supported

This is due to a llvm BPF backend bug. The fix 
  https://reviews.llvm.org/D78466
has been pushed to llvm 10.x release branch and will be
available in 10.0.1. The fix is available in llvm 11.0.0 trunk.

BPF CO-RE-based tests and Clang version
=======================================

A set of selftests use BPF target-specific built-ins, which might require
bleeding-edge Clang versions (Clang 12 nightly at this time).

Few sub-tests of core_reloc test suit (part of test_progs test runner) require
the following built-ins, listed with corresponding Clang diffs introducing
them to Clang/LLVM. These sub-tests are going to be skipped if Clang is too
old to support them, they shouldn't cause build failures or runtime test
failures:

  - __builtin_btf_type_id() ([0], [1], [2]);
  - __builtin_preserve_type_info(), __builtin_preserve_enum_value() ([3], [4]).

  [0] https://reviews.llvm.org/D74572
  [1] https://reviews.llvm.org/D74668
  [2] https://reviews.llvm.org/D85174
  [3] https://reviews.llvm.org/D83878
  [4] https://reviews.llvm.org/D83242