1
0
Fork 0
mirror of synced 2025-03-06 20:59:54 +01:00
linux/tools/testing/selftests/bpf
Linus Torvalds 7b95f0563a Kbuild updates for v5.11
- Use /usr/bin/env for shebang lines in scripts
 
  - Remove useless -Wnested-externs warning flag
 
  - Update documents
 
  - Refactor log handling in modpost
 
  - Stop building modules without MODULE_LICENSE() tag
 
  - Make the insane combination of 'static' and EXPORT_SYMBOL an error
 
  - Improve genksyms to handle _Static_assert()
 -----BEGIN PGP SIGNATURE-----
 
 iQJJBAABCgAzFiEEbmPs18K1szRHjPqEPYsBB53g2wYFAl/iIY8VHG1hc2FoaXJv
 eUBrZXJuZWwub3JnAAoJED2LAQed4NsGbfsP+gMv3F+ztqfYNoMNmZcj+fLh4zrA
 8I3d0t0AoxovV1bsyVDk9nebsYLbDdsyCdHM1ZNFAFEpf9QLL8sxtpHvaaxy+rCq
 PCmy+E6iO5B91oORhuqpYpcmmgPHf4RrpUcnEEiWOMrHE5giYbXz3AiqGAt/88J5
 Y8yaPCQVhNJNkx73KHCMYLVp97xPGa5HvNrcskAueA8uG+FCRDFaIqFX+OYbGnmC
 /3kVAJmX6i2kNPzvnXpAW6mTbI/z7+s/k5yRbEFYNUtJqN+BfaFadV8pyOGXQr1T
 fwXVtXdWqVg7rbqupyVYItLHaOq2RBm4PJuee/8s7ooBI1y7U6N0HZCj+jES92ML
 wuqEyED+lLzmxRyfhmrFH/5XhxacciO7dQb9Woe5FQ6QOm+tQPtwCnxwrSSAK4XU
 k7CsJ+OMJI+JulFrgPuC/rcESjTAsgL2j4SDhsO0GLV+Qb/P9kXR88jt5eJygmSx
 xZWpI+FUUY/Ihw648i2pkHGS/NmfOrT78X4nvbOWMDKOV02NEoMmLDYnZPUIoetn
 yUo8+xSBp6n3aTy5TDtrMblNRUJwL9OzDlDiEjsPtNUJZ6sdQzFRsxJ7+FCw2Ley
 rKN2r+i5FdyAq0LLHDhoEcJxFY7cj+yAsd0QqtBb0NZLgLsaPiP7w45CXRNpqkWG
 BbK+F1E9jP8VfiZu
 =+27V
 -----END PGP SIGNATURE-----

Merge tag 'kbuild-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild

Pull Kbuild updates from Masahiro Yamada:

 - Use /usr/bin/env for shebang lines in scripts

 - Remove useless -Wnested-externs warning flag

 - Update documents

 - Refactor log handling in modpost

 - Stop building modules without MODULE_LICENSE() tag

 - Make the insane combination of 'static' and EXPORT_SYMBOL an error

 - Improve genksyms to handle _Static_assert()

* tag 'kbuild-v5.11' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild:
  Documentation/kbuild: Document platform dependency practises
  Documentation/kbuild: Document COMPILE_TEST dependencies
  genksyms: Ignore module scoped _Static_assert()
  modpost: turn static exports into error
  modpost: turn section mismatches to error from fatal()
  modpost: change license incompatibility to error() from fatal()
  modpost: turn missing MODULE_LICENSE() into error
  modpost: refactor error handling and clarify error/fatal difference
  modpost: rename merror() to error()
  kbuild: don't hardcode depmod path
  kbuild: doc: document subdir-y syntax
  kbuild: doc: clarify the difference between extra-y and always-y
  kbuild: doc: split if_changed explanation to a separate section
  kbuild: doc: merge 'Special Rules' and 'Custom kbuild commands' sections
  kbuild: doc: fix 'List directories to visit when descending' section
  kbuild: doc: replace arch/$(ARCH)/ with arch/$(SRCARCH)/
  kbuild: doc: update the description about kbuild Makefiles
  Makefile.extrawarn: remove -Wnested-externs warning
  tweewide: Fix most Shebang lines
2020-12-22 14:02:39 -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 selftests/bpf: get rid of -D__x86_64__ 2017-05-03 09:51:25 -04:00
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-14 15:34:36 -08:00
progs selftests/bpf: Add a test for ptr_to_map_value on stack for helper access 2020-12-14 21:50:10 +01:00
verifier Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2020-12-14 15:34:36 -08:00
.gitignore selftests/bpf: Xsk selftests - adding xdpxceiver to .gitignore 2020-12-10 16:45:19 +01: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: add ld64 imm test cases 2018-05-14 19:11:45 -07:00
bpf_rlimit.h bpf: unify rlimit handling in selftests 2018-02-26 20:11:23 -08:00
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 selftests/bpf: run flow dissector tests in skb-less mode 2019-04-23 18:36:34 +02:00
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: Silence ima_setup.sh when not running in verbose mode. 2020-12-10 22:14:32 -08:00
Makefile selftests/bpf: Drop the need for LLVM's llc 2020-12-10 21:33:27 -08:00
netcnt_common.h selftests/bpf: cgroup local storage-based network counters 2018-10-01 16:18:33 +02:00
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 bpf: Refactor BTF encoding macro to test_btf.h 2019-04-27 09:07:05 -07:00
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 selftests: bpf: remove duplicated include 2019-01-29 00:09:26 +01:00
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 selftests/bpf: Test function_graph tracer and bpf trampoline together 2019-12-11 15:19:29 -08:00
test_iptunnel_common.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 206 2019-05-30 11:29:53 -07:00
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 media: bpf: add bpf function to report mouse movement 2018-12-09 14:37:18 -08:00
test_lirc_mode2_user.c media: bpf: add bpf function to report mouse movement 2018-12-09 14:37:18 -08:00
test_lpm_map.c bpf: lpm_trie: check left child of last leftmost node for NULL 2019-06-11 13:52:37 +02:00
test_lru_map.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 206 2019-05-30 11:29:53 -07:00
test_lwt_ip_encap.sh selftests/bpf: More compatible nc options in test_lwt_ip_encap 2019-10-08 23:59:22 +02:00
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 bpf: Add BPF_MAP_TYPE_SK_STORAGE test to test_maps 2019-04-27 09:07:05 -07:00
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 Kbuild updates for v5.11 2020-12-22 14:02:39 -08:00
test_progs.c selftests/bpf: Silence ima_setup.sh when not running in verbose mode. 2020-12-10 22:14:32 -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 bpf: Test BPF_PROG_TYPE_SK_REUSEPORT 2018-08-11 01:58:46 +02:00
test_skb_cgroup_id.sh kselftests/bpf: use ping6 as the default ipv6 ping binary if it exists 2018-10-31 23:05:30 +01:00
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 kselftests/bpf: use ping6 as the default ipv6 ping binary if it exists 2018-10-31 23:05:30 +01:00
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 selftests/bpf: Integrate verbose verifier log into test_progs 2019-11-24 16:58:45 -08:00
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 bpf: unify rlimit handling in selftests 2018-02-26 20:11:23 -08:00
test_tc_edt.sh selftests/bpf: More compatible nc options in test_tc_edt 2019-10-18 22:33:57 +02:00
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 selftests, bpf: Fix test_tc_tunnel hanging 2019-11-18 21:31:49 +01:00
test_tcp_check_syncookie.sh selftests/bpf: add test for bpf_tcp_gen_syncookie 2019-07-30 21:03:05 -07:00
test_tcp_check_syncookie_user.c selftests/bpf: add test for bpf_tcp_gen_syncookie 2019-07-30 21:03:05 -07:00
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 selftests/bpf: add a test case for sock_ops perf-event notification 2018-11-09 09:40:17 +01:00
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 errno clobbering 2020-12-04 11:53:17 -08:00
test_verifier_log.c bpf: unify rlimit handling in selftests 2018-02-26 20:11:23 -08:00
test_xdp_meta.sh tools/bpf: fix batch-mode test failure of test_xdp_redirect.sh 2018-02-06 11:34:42 +01:00
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 selftests, bpf: Add test for veth native XDP 2019-06-24 18:18:30 -07:00
test_xdp_vlan.sh selftests/bpf: reduce time to execute test_xdp_vlan.sh 2019-08-05 11:17:40 -07:00
test_xdp_vlan_mode_generic.sh selftests/bpf: add wrapper scripts for test_xdp_vlan.sh 2019-08-05 11:17:40 -07:00
test_xdp_vlan_mode_native.sh selftests/bpf: add wrapper scripts for test_xdp_vlan.sh 2019-08-05 11:17:40 -07:00
test_xdping.sh selftests/bpf: measure RTT from xdp using xdping 2019-05-31 19:53:45 -07:00
test_xsk.sh selftests/bpf: Xsk selftests - Bi-directional Sockets - SKB, DRV 2020-12-09 16:44:45 +01:00
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 selftests: bpf: modify urandom_read and link it non-statically 2019-03-21 19:37:30 -07:00
with_addr.sh selftests/bpf: test bpf flow dissection 2018-09-14 12:04:33 -07:00
with_tunnels.sh selftests/bpf: test bpf flow dissection 2018-09-14 12:04:33 -07:00
xdping.c selftests: bpf: correct perror strings 2019-11-28 22:40:30 -08:00
xdping.h selftests/bpf: measure RTT from xdp using xdping 2019-05-31 19:53:45 -07:00
xdpxceiver.c selftests/bpf: Xsk selftests - Bi-directional Sockets - SKB, DRV 2020-12-09 16:44:45 +01:00
xdpxceiver.h selftests/bpf: Xsk selftests - Bi-directional Sockets - SKB, DRV 2020-12-09 16:44:45 +01:00
xsk_prereqs.sh selftests/bpf: Xsk selftests - SKB POLL, NOPOLL 2020-12-09 16:44:45 +01:00

==================
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