Name Date Size

..25-Oct-20244 KiB

.gitignoreH A D25-Oct-2024591

bench.cH A D25-Oct-202411.5 KiB

bench.hH A D25-Oct-20241.6 KiB

benchs/H25-Oct-20244 KiB

bpf_legacy.hH A D25-Oct-2024781

bpf_rand.hH A D25-Oct-20243.1 KiB

bpf_rlimit.hH A D25-Oct-2024907

bpf_tcp_helpers.hH A D25-Oct-20246.5 KiB

bpf_util.hH A D25-Oct-20241 KiB

cgroup_helpers.cH A D25-Oct-20247.5 KiB

cgroup_helpers.hH A D25-Oct-2024584

configH A D25-Oct-2024826

flow_dissector_load.cH A D25-Oct-20242.3 KiB

flow_dissector_load.hH A D25-Oct-20241.4 KiB

get_cgroup_id_user.cH A D25-Oct-20243.6 KiB

gnu/H25-Oct-20244 KiB

MakefileH A D25-Oct-202416.3 KiB

map_tests/H25-Oct-20244 KiB

netcnt_common.hH A D25-Oct-2024320

network_helpers.cH A D25-Oct-20245.2 KiB

network_helpers.hH A D25-Oct-20241.1 KiB

prog_tests/H25-Oct-20244 KiB

progs/H25-Oct-202420 KiB

README.rstH A D25-Oct-20243.3 KiB

settingsH A D25-Oct-202410

tcp_client.pyH A D25-Oct-2024906

tcp_server.pyH A D25-Oct-20241.7 KiB

test_bpftool.pyH A D25-Oct-20245.4 KiB

test_bpftool.shH A D25-Oct-2024127

test_bpftool_build.shH A D25-Oct-20244 KiB

test_bpftool_metadata.shH A D25-Oct-20241.6 KiB

test_btf.hH A D25-Oct-20242.3 KiB

test_cgroup_storage.cH A D25-Oct-20244.6 KiB

test_cpp.cppH A D25-Oct-2024572

test_current_pid_tgid_new_ns.cH A D25-Oct-20243.9 KiB

test_dev_cgroup.cH A D25-Oct-20242 KiB

test_flow_dissector.cH A D25-Oct-202418.2 KiB

test_flow_dissector.shH A D25-Oct-20245.1 KiB

test_ftrace.shH A D25-Oct-2024701

test_iptunnel_common.hH A D25-Oct-2024457

test_kmod.shH A D25-Oct-20241.3 KiB

test_lirc_mode2.shH A D25-Oct-2024764

test_lirc_mode2_user.cH A D25-Oct-20244.3 KiB

test_lpm_map.cH A D25-Oct-202422.9 KiB

test_lru_map.cH A D25-Oct-202423.4 KiB

test_lwt_ip_encap.shH A D25-Oct-202414.6 KiB

test_lwt_seg6local.shH A D25-Oct-20245.7 KiB

test_maps.cH A D25-Oct-202446.1 KiB

test_maps.hH A D25-Oct-2024350

test_netcnt.cH A D25-Oct-20243.4 KiB

test_offload.pyH A D25-Oct-202450.6 KiB

test_progs.cH A D25-Oct-202415.7 KiB

test_progs.hH A D25-Oct-20245.5 KiB

test_select_reuseport_common.hH A D25-Oct-2024587

test_skb_cgroup_id.shH A D25-Oct-20241.3 KiB

test_skb_cgroup_id_user.cH A D25-Oct-20243.5 KiB

test_sock.cH A D25-Oct-20249.1 KiB

test_sock_addr.cH A D25-Oct-202438 KiB

test_sock_addr.shH A D25-Oct-20241.1 KiB

test_socket_cookie.cH A D25-Oct-20243.8 KiB

test_sockmap.cH A D25-Oct-202443.6 KiB

test_stub.cH A D25-Oct-20241.3 KiB

test_sysctl.cH A D25-Oct-202440.2 KiB

test_tag.cH A D25-Oct-20244.2 KiB

test_tc_edt.shH A D25-Oct-20242.7 KiB

test_tc_redirect.shH A D25-Oct-20247 KiB

test_tc_tunnel.shH A D25-Oct-20247.3 KiB

test_tcp_check_syncookie.shH A D25-Oct-20241.7 KiB

test_tcp_check_syncookie_user.cH A D25-Oct-20244.8 KiB

test_tcp_hdr_options.hH A D25-Oct-20243.3 KiB

test_tcpbpf.hH A D25-Oct-2024335

test_tcpbpf_user.cH A D25-Oct-20243.9 KiB

test_tcpnotify.hH A D25-Oct-2024273

test_tcpnotify_user.cH A D25-Oct-20243.7 KiB

test_tunnel.shH A D25-Oct-202418.9 KiB

test_verifier.cH A D25-Oct-202432.3 KiB

test_verifier_log.cH A D25-Oct-20243.8 KiB

test_xdp_meta.shH A D25-Oct-20241.2 KiB

test_xdp_redirect.shH A D25-Oct-20241.7 KiB

test_xdp_veth.shH A D25-Oct-20243 KiB

test_xdp_vlan.shH A D25-Oct-20245.6 KiB

test_xdp_vlan_mode_generic.shH A D25-Oct-2024186

test_xdp_vlan_mode_native.shH A D25-Oct-2024180

test_xdping.shH A D25-Oct-20242 KiB

testing_helpers.cH A D25-Oct-20241.5 KiB

testing_helpers.hH A D25-Oct-2024308

trace_helpers.cH A D25-Oct-20242.4 KiB

trace_helpers.hH A D25-Oct-2024435

urandom_read.cH A D25-Oct-2024552

verifier/H25-Oct-20244 KiB

with_addr.shH A D25-Oct-20241.3 KiB

with_tunnels.shH A D25-Oct-2024693

xdping.cH A D25-Oct-20245.8 KiB

xdping.hH A D25-Oct-2024283

README.rst

1==================
2BPF Selftest Notes
3==================
4General instructions on running selftests can be found in
5`Documentation/bpf/bpf_devel_QA.rst`_.
6
7Additional information about selftest failures are
8documented here.
9
10profiler[23] test failures with clang/llvm <12.0.0
11==================================================
12
13With clang/llvm <12.0.0, the profiler[23] test may fail.
14The symptom looks like
15
16.. code-block:: c
17
18  // r9 is a pointer to map_value
19  // r7 is a scalar
20  17:       bf 96 00 00 00 00 00 00 r6 = r9
21  18:       0f 76 00 00 00 00 00 00 r6 += r7
22  math between map_value pointer and register with unbounded min value is not allowed
23
24  // the instructions below will not be seen in the verifier log
25  19:       a5 07 01 00 01 01 00 00 if r7 < 257 goto +1
26  20:       bf 96 00 00 00 00 00 00 r6 = r9
27  // r6 is used here
28
29The verifier will reject such code with above error.
30At insn 18 the r7 is indeed unbounded. The later insn 19 checks the bounds and
31the insn 20 undoes map_value addition. It is currently impossible for the
32verifier to understand such speculative pointer arithmetic.
33Hence
34    https://reviews.llvm.org/D85570
35addresses it on the compiler side. It was committed on llvm 12.
36
37The corresponding C code
38.. code-block:: c
39
40  for (int i = 0; i < MAX_CGROUPS_PATH_DEPTH; i++) {
41          filepart_length = bpf_probe_read_str(payload, ...);
42          if (filepart_length <= MAX_PATH) {
43                  barrier_var(filepart_length); // workaround
44                  payload += filepart_length;
45          }
46  }
47
48bpf_iter test failures with clang/llvm 10.0.0
49=============================================
50
51With clang/llvm 10.0.0, the following two bpf_iter tests failed:
52  * ``bpf_iter/ipv6_route``
53  * ``bpf_iter/netlink``
54
55The symptom for ``bpf_iter/ipv6_route`` looks like
56
57.. code-block:: c
58
59  2: (79) r8 = *(u64 *)(r1 +8)
60  ...
61  14: (bf) r2 = r8
62  15: (0f) r2 += r1
63  ; BPF_SEQ_PRINTF(seq, "%pi6 %02x ", &rt->fib6_dst.addr, rt->fib6_dst.plen);
64  16: (7b) *(u64 *)(r8 +64) = r2
65  only read is supported
66
67The symptom for ``bpf_iter/netlink`` looks like
68
69.. code-block:: c
70
71  ; struct netlink_sock *nlk = ctx->sk;
72  2: (79) r7 = *(u64 *)(r1 +8)
73  ...
74  15: (bf) r2 = r7
75  16: (0f) r2 += r1
76  ; BPF_SEQ_PRINTF(seq, "%pK %-3d ", s, s->sk_protocol);
77  17: (7b) *(u64 *)(r7 +0) = r2
78  only read is supported
79
80This is due to a llvm BPF backend bug. The fix 
81  https://reviews.llvm.org/D78466
82has been pushed to llvm 10.x release branch and will be
83available in 10.0.1. The fix is available in llvm 11.0.0 trunk.
84
85BPF CO-RE-based tests and Clang version
86=======================================
87
88A set of selftests use BPF target-specific built-ins, which might require
89bleeding-edge Clang versions (Clang 12 nightly at this time).
90
91Few sub-tests of core_reloc test suit (part of test_progs test runner) require
92the following built-ins, listed with corresponding Clang diffs introducing
93them to Clang/LLVM. These sub-tests are going to be skipped if Clang is too
94old to support them, they shouldn't cause build failures or runtime test
95failures:
96
97  - __builtin_btf_type_id() ([0], [1], [2]);
98  - __builtin_preserve_type_info(), __builtin_preserve_enum_value() ([3], [4]).
99
100  [0] https://reviews.llvm.org/D74572
101  [1] https://reviews.llvm.org/D74668
102  [2] https://reviews.llvm.org/D85174
103  [3] https://reviews.llvm.org/D83878
104  [4] https://reviews.llvm.org/D83242
105