linux-stable/tools/testing/selftests/bpf
Jakub Kicinski a1dd1d8697 Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next
Alexei Starovoitov says:

====================
pull-request: bpf-next 2020-12-03

The main changes are:

1) Support BTF in kernel modules, from Andrii.

2) Introduce preferred busy-polling, from Björn.

3) bpf_ima_inode_hash() and bpf_bprm_opts_set() helpers, from KP Singh.

4) Memcg-based memory accounting for bpf objects, from Roman.

5) Allow bpf_{s,g}etsockopt from cgroup bind{4,6} hooks, from Stanislav.

* https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next: (118 commits)
  selftests/bpf: Fix invalid use of strncat in test_sockmap
  libbpf: Use memcpy instead of strncpy to please GCC
  selftests/bpf: Add fentry/fexit/fmod_ret selftest for kernel module
  selftests/bpf: Add tp_btf CO-RE reloc test for modules
  libbpf: Support attachment of BPF tracing programs to kernel modules
  libbpf: Factor out low-level BPF program loading helper
  bpf: Allow to specify kernel module BTFs when attaching BPF programs
  bpf: Remove hard-coded btf_vmlinux assumption from BPF verifier
  selftests/bpf: Add CO-RE relocs selftest relying on kernel module BTF
  selftests/bpf: Add support for marking sub-tests as skipped
  selftests/bpf: Add bpf_testmod kernel module for testing
  libbpf: Add kernel module BTF support for CO-RE relocations
  libbpf: Refactor CO-RE relocs to not assume a single BTF object
  libbpf: Add internal helper to load BTF data by FD
  bpf: Keep module's btf_data_size intact after load
  bpf: Fix bpf_put_raw_tracepoint()'s use of __module_address()
  selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP
  bpf: Adds support for setting window clamp
  samples/bpf: Fix spelling mistake "recieving" -> "receiving"
  bpf: Fix cold build of test_progs-no_alu32
  ...
====================

Link: https://lore.kernel.org/r/20201204021936.85653-1-alexei.starovoitov@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-12-04 07:48:12 -08:00
..
benchs selftests: Remove fmod_ret from test_overhead 2020-09-28 17:20:28 -07:00
bpf_testmod selftests/bpf: Add bpf_testmod kernel module for testing 2020-12-03 17:38:20 -08:00
gnu
map_tests .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
prog_tests Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2020-12-04 07:48:12 -08:00
progs Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2020-12-04 07:48:12 -08:00
verifier selftests/bpf: Mark tests that require unaligned memory access 2020-11-18 17:45:35 -08:00
.gitignore selftests/bpf: Add bpf_testmod kernel module for testing 2020-12-03 17:38:20 -08:00
bench.c selftests: Remove fmod_ret from test_overhead 2020-09-28 17:20:28 -07:00
bench.h selftests/bpf: Add benchmark runner infrastructure 2020-05-13 12:19:38 -07:00
bpf_legacy.h selftests: bpf: Remove unused bpf_map_def_legacy struct 2020-07-08 01:33:14 +02:00
bpf_rand.h
bpf_rlimit.h
bpf_tcp_helpers.h selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP 2020-12-03 17:23:24 -08:00
bpf_util.h selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
btf_helpers.c selftests/bpf: Add split BTF dedup selftests 2020-11-05 18:37:31 -08:00
btf_helpers.h selftests/bpf: Add split BTF dedup selftests 2020-11-05 18:37:31 -08:00
cgroup_helpers.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
cgroup_helpers.h bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
config selftests/bpf: Add config dependency on BLK_DEV_LOOP 2020-12-03 11:20:21 -08:00
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 bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
ima_setup.sh selftests/bpf: Indent ima_setup.sh with tabs. 2020-12-03 11:20:21 -08:00
Makefile selftests/bpf: Add bpf_testmod kernel module for testing 2020-12-03 17:38:20 -08: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 selftest/bpf: Fix rst formatting in readme 2020-11-24 22:59:52 +01:00
settings selftests: bpf: Switch off timeout 2020-08-06 16:57:05 -07:00
test_bpftool.py selftests/bpf: Add test for "bpftool feature" command 2020-02-26 18:34:34 +01:00
test_bpftool.sh selftests/bpf: Add test for "bpftool feature" command 2020-02-26 18:34:34 +01:00
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_btf.h
test_cgroup_storage.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_cpp.cpp selftests: Use consistent include paths for libbpf 2020-01-20 16:37:45 -08:00
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 bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_flow_dissector.c
test_flow_dissector.sh selftests/bpf: Add test based on port range for BPF flow dissector 2020-01-27 11:25:07 +01:00
test_ftrace.sh
test_iptunnel_common.h
test_kmod.sh selftests: bpf: test_kmod.sh: Fix running out of srctree 2020-07-21 13:26:24 -07:00
test_lirc_mode2.sh
test_lirc_mode2_user.c
test_lpm_map.c
test_lru_map.c
test_lwt_ip_encap.sh
test_lwt_seg6local.sh selftests/bpf: Fix test_lwt_seg6local.sh hangs 2020-07-21 13:26:26 -07:00
test_maps.c bpf: Lift hashtab key_size limit 2020-11-05 20:04:46 -08:00
test_maps.h
test_netcnt.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_offload.py selftests/bpf: fix netdevsim trap_flow_action_cookie read 2020-07-30 16:33:07 -07:00
test_progs.c selftests/bpf: Add support for marking sub-tests as skipped 2020-12-03 17:38:21 -08:00
test_progs.h selftests/bpf: Add bpf_testmod kernel module for testing 2020-12-03 17:38:20 -08:00
test_select_reuseport_common.h
test_skb_cgroup_id.sh
test_skb_cgroup_id_user.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_sock.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
test_sock_addr.c selftests/bpf: Rewrite test_sock_addr bind bpf into C 2020-12-02 13:25:11 -08:00
test_sock_addr.sh
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-03 18:07:05 -08:00
test_stub.c
test_sysctl.c bpf, selftests: Use single cgroup helpers for both test_sockmap/progs 2020-08-01 20:20:59 -07:00
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.sh
test_tcp_check_syncookie_user.c
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.h selftests/bpf: Add Userspace tests for TCP_WINDOW_CLAMP 2020-12-03 17:23:24 -08:00
test_tcpnotify.h
test_tcpnotify_user.c bpf: Fix compilation warning of selftests 2020-08-06 16:58:42 -07:00
test_tunnel.sh selftest/bpf: Add missed ip6ip6 test back 2020-11-10 15:37:45 -08:00
test_verifier.c selftests/bpf: Avoid running unprivileged tests with alignment requirements 2020-11-18 17:45:31 -08:00
test_verifier_log.c
test_xdp_meta.sh
test_xdp_redirect.sh selftests/bpf: Add xdpdrv mode for test_xdp_redirect 2020-07-31 00:43:49 +02:00
test_xdp_veth.sh
test_xdp_vlan.sh
test_xdp_vlan_mode_generic.sh
test_xdp_vlan_mode_native.sh
test_xdping.sh
testing_helpers.c selftests/bpf: Add link detach tests for cgroup, netns, and xdp bpf_links 2020-08-01 20:38:28 -07:00
testing_helpers.h selftests/bpf: Add link detach tests for cgroup, netns, and xdp bpf_links 2020-08-01 20:38:28 -07:00
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`__.

__ /Documentation/bpf/bpf_devel_QA.rst#q-how-to-run-bpf-selftests


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 `this patch`__ addresses it on the compiler side. It was committed on llvm 12.

__ https://reviews.llvm.org/D85570

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`__
has been pushed to llvm 10.x release branch and will be
available in 10.0.1. The patch is available in llvm 11.0.0 trunk.

__  https://reviews.llvm.org/D78466

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