blob: 75f7a2ce334b11f2e9ad119dff67f6e2d112f57e [file] [log] [blame]
Eduard Zingerman55108622023-03-25 04:54:46 +02001// SPDX-License-Identifier: GPL-2.0-only
2
3#include <test_progs.h>
4
5#include "cap_helpers.h"
Eduard Zingerman9d0f1562023-03-25 04:54:47 +02006#include "verifier_and.skel.h"
Alexei Starovoitov80a41292024-03-07 17:08:10 -08007#include "verifier_arena.skel.h"
Alexei Starovoitova90c5842024-03-14 19:18:34 -07008#include "verifier_arena_large.skel.h"
Eduard Zingermana3c830a2023-03-25 04:54:48 +02009#include "verifier_array_access.skel.h"
Eduard Zingerman0ccbe492023-03-25 04:54:49 +020010#include "verifier_basic_stack.skel.h"
Daniel Xuf04f2ce2023-12-11 13:20:09 -070011#include "verifier_bitfield_write.skel.h"
Eduard Zingermanc9233652023-04-21 20:42:12 +030012#include "verifier_bounds.skel.h"
Eduard Zingerman7605f942023-03-25 04:54:50 +020013#include "verifier_bounds_deduction.skel.h"
Yonghong Songaec08d62023-04-06 09:45:00 -070014#include "verifier_bounds_deduction_non_const.skel.h"
Eduard Zingermanb14a7022023-03-25 04:54:51 +020015#include "verifier_bounds_mix_sign_unsign.skel.h"
Eduard Zingerman965a3f92023-04-21 20:42:13 +030016#include "verifier_bpf_get_stack.skel.h"
Yonghong Song79dbabc2023-07-27 18:13:14 -070017#include "verifier_bswap.skel.h"
Eduard Zingerman37467c72023-04-21 20:42:14 +030018#include "verifier_btf_ctx_access.skel.h"
Andrii Nakryikof0a50562023-12-14 17:13:34 -080019#include "verifier_btf_unreliable_prog.skel.h"
Eduard Zingerman2f2047c2023-03-25 04:54:52 +020020#include "verifier_cfg.skel.h"
Eduard Zingerman047687a2023-03-25 04:54:53 +020021#include "verifier_cgroup_inv_retcode.skel.h"
Eduard Zingermanb1b63722023-03-25 04:54:54 +020022#include "verifier_cgroup_skb.skel.h"
Eduard Zingerman8f16f3c2023-03-25 04:54:55 +020023#include "verifier_cgroup_storage.skel.h"
Daniel Borkmann2e3f0662024-09-13 21:17:53 +020024#include "verifier_const.skel.h"
Eduard Zingermana2777ea2023-03-25 04:54:56 +020025#include "verifier_const_or.skel.h"
Eduard Zingermanfcd36962023-04-21 20:42:15 +030026#include "verifier_ctx.skel.h"
Eduard Zingermana58475a2023-03-25 04:54:57 +020027#include "verifier_ctx_sk_msg.skel.h"
Eduard Zingerman60802802023-04-21 20:42:16 +030028#include "verifier_d_path.skel.h"
Eduard Zingerman0a372c92023-04-21 20:42:17 +030029#include "verifier_direct_packet_access.skel.h"
Eduard Zingerman84988472023-03-25 04:54:58 +020030#include "verifier_direct_stack_access_wraparound.skel.h"
Eduard Zingerman01a09252023-03-25 04:54:59 +020031#include "verifier_div0.skel.h"
Eduard Zingerman9553de72023-03-25 04:55:00 +020032#include "verifier_div_overflow.skel.h"
Andrii Nakryikoe8a339b2023-11-23 19:59:37 -080033#include "verifier_global_subprogs.skel.h"
Andrii Nakryikoc3812032024-01-29 16:06:48 -080034#include "verifier_global_ptr_args.skel.h"
Yonghong Song613dad42023-07-27 18:13:29 -070035#include "verifier_gotol.skel.h"
Eduard Zingermanb37d7762023-03-25 04:55:01 +020036#include "verifier_helper_access_var_len.skel.h"
Eduard Zingermanfb179fe2023-03-25 04:55:02 +020037#include "verifier_helper_packet_access.skel.h"
Eduard Zingerman77aa2562023-03-25 04:55:03 +020038#include "verifier_helper_restricted.skel.h"
Eduard Zingermanecc42482023-03-25 04:55:04 +020039#include "verifier_helper_value_access.skel.h"
Eduard Zingerman01481e62023-03-25 04:55:05 +020040#include "verifier_int_ptr.skel.h"
Eduard Zingerman958465e22023-11-21 04:06:57 +020041#include "verifier_iterating_callbacks.skel.h"
Eduard Zingermana5828e32023-04-21 20:42:18 +030042#include "verifier_jeq_infer_not_null.skel.h"
Yonghong Songeff5b5f2024-09-04 15:12:56 -070043#include "verifier_jit_convergence.skel.h"
Eduard Zingermane2978752023-03-25 04:55:06 +020044#include "verifier_ld_ind.skel.h"
Yonghong Song147c8f42023-07-27 18:13:04 -070045#include "verifier_ldsx.skel.h"
Eduard Zingerman583c7ce2023-03-25 04:55:07 +020046#include "verifier_leak_ptr.skel.h"
Daniel Borkmanndb123e42024-10-16 15:49:13 +020047#include "verifier_linked_scalars.skel.h"
Eduard Zingermana6fc14d2023-04-21 20:42:19 +030048#include "verifier_loops1.skel.h"
Eduard Zingermanb427ca52023-04-21 20:42:20 +030049#include "verifier_lwt.skel.h"
Eduard Zingerman4a400ef2023-04-21 20:42:21 +030050#include "verifier_map_in_map.skel.h"
Eduard Zingermancaf345c2023-03-25 04:55:08 +020051#include "verifier_map_ptr.skel.h"
Eduard Zingermanaee17792023-04-21 20:42:22 +030052#include "verifier_map_ptr_mixing.skel.h"
Eduard Zingerman05e474e2023-03-25 04:55:09 +020053#include "verifier_map_ret_val.skel.h"
Eduard Zingermanade3f082023-03-25 04:55:10 +020054#include "verifier_masking.skel.h"
Eduard Zingerman65428312023-03-25 04:55:11 +020055#include "verifier_meta_access.skel.h"
Yonghong Songf02ec3ff2023-07-27 18:13:09 -070056#include "verifier_movsx.skel.h"
Daniel Borkmann82bbe132024-10-21 17:28:09 +020057#include "verifier_mtu.skel.h"
Florian Westphal006c0e42023-04-21 19:03:00 +020058#include "verifier_netfilter_ctx.skel.h"
59#include "verifier_netfilter_retcode.skel.h"
Eduard Zingermanadec67d2024-08-22 01:41:08 -070060#include "verifier_bpf_fastcall.skel.h"
Daniel Borkmannceb65eb2024-06-13 13:53:10 +020061#include "verifier_or_jmp32_k.skel.h"
Shung-Hsi Yu3c419712023-11-02 13:39:05 +080062#include "verifier_precision.skel.h"
Eduard Zingerman35150202023-04-21 23:45:14 +030063#include "verifier_prevent_map_lookup.skel.h"
Eduard Zingerman5a77a012023-03-25 04:55:12 +020064#include "verifier_raw_stack.skel.h"
Eduard Zingerman18cdc2b2023-03-25 04:55:13 +020065#include "verifier_raw_tp_writable.skel.h"
Yonghong Song49859de2023-04-17 15:21:39 -070066#include "verifier_reg_equal.skel.h"
Eduard Zingerman8be63272023-04-21 20:42:25 +030067#include "verifier_ref_tracking.skel.h"
Eduard Zingerman16a42572023-04-21 20:42:26 +030068#include "verifier_regalloc.skel.h"
Eduard Zingermanb7e42032023-03-25 04:55:14 +020069#include "verifier_ringbuf.skel.h"
Eduard Zingerman65222842023-04-21 20:42:27 +030070#include "verifier_runtime_jit.skel.h"
Eduard Zingermandec02022023-06-13 18:38:22 +030071#include "verifier_scalar_ids.skel.h"
Yonghong Songde1c2682023-07-27 18:13:21 -070072#include "verifier_sdiv.skel.h"
Eduard Zingerman034d9ad2023-04-21 20:42:28 +030073#include "verifier_search_pruning.skel.h"
Eduard Zingerman426fc0e2023-04-21 20:42:29 +030074#include "verifier_sock.skel.h"
Jordan Rife73964e92024-05-10 14:02:18 -050075#include "verifier_sock_addr.skel.h"
Jakub Sitnickia63bf552024-05-27 13:20:09 +020076#include "verifier_sockmap_mutate.skel.h"
Eduard Zingermanf4fe3cf2023-03-25 04:55:15 +020077#include "verifier_spill_fill.skel.h"
Eduard Zingermanf323a812023-04-21 20:42:30 +030078#include "verifier_spin_lock.skel.h"
Eduard Zingermanedff37b2023-03-25 04:55:16 +020079#include "verifier_stack_ptr.skel.h"
Andrii Nakryiko3ef3d212023-05-04 21:33:16 -070080#include "verifier_subprog_precision.skel.h"
Eduard Zingerman81d1d6d2023-04-21 20:42:31 +030081#include "verifier_subreg.skel.h"
Eduard Zingermane5bdd6a2024-08-20 03:23:56 -070082#include "verifier_tailcall_jit.skel.h"
Stanislav Fomichev2597a252023-06-26 14:25:22 -070083#include "verifier_typedef.skel.h"
Eduard Zingermanab839a52023-03-25 04:55:17 +020084#include "verifier_uninit.skel.h"
Eduard Zingerman82887c22023-04-21 20:42:32 +030085#include "verifier_unpriv.skel.h"
86#include "verifier_unpriv_perf.skel.h"
Eduard Zingerman03391492023-03-25 04:55:18 +020087#include "verifier_value_adj_spill.skel.h"
Eduard Zingerman8f59e872023-03-25 04:55:19 +020088#include "verifier_value.skel.h"
Eduard Zingermanefe25a32023-04-21 20:42:33 +030089#include "verifier_value_illegal_alu.skel.h"
Eduard Zingermand3305282023-03-25 04:55:20 +020090#include "verifier_value_or_null.skel.h"
Eduard Zingerman4db10a8242023-04-21 20:42:34 +030091#include "verifier_value_ptr_arith.skel.h"
Eduard Zingermand15f5b62023-03-25 04:55:21 +020092#include "verifier_var_off.skel.h"
Matt Bobrowski2b399b92024-07-31 11:08:33 +000093#include "verifier_vfs_accept.skel.h"
Matt Bobrowskiff358ada2024-07-31 11:08:32 +000094#include "verifier_vfs_reject.skel.h"
Eduard Zingermana8036ae2023-03-25 04:55:22 +020095#include "verifier_xadd.skel.h"
Eduard Zingermanffb515c2023-03-25 04:55:23 +020096#include "verifier_xdp.skel.h"
Eduard Zingerman6e9e1412023-03-28 05:08:12 +030097#include "verifier_xdp_direct_packet_access.skel.h"
Yafang Shao6ba7acd2024-05-17 10:30:34 +080098#include "verifier_bits_iter.skel.h"
Xu Kuohai04d82432024-07-19 19:00:59 +080099#include "verifier_lsm.skel.h"
Eduard Zingerman55108622023-03-25 04:54:46 +0200100
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300101#define MAX_ENTRIES 11
102
103struct test_val {
104 unsigned int index;
105 int foo[MAX_ENTRIES];
106};
107
Eduard Zingerman55108622023-03-25 04:54:46 +0200108__maybe_unused
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300109static void run_tests_aux(const char *skel_name,
110 skel_elf_bytes_fn elf_bytes_factory,
111 pre_execution_cb pre_execution_cb)
Eduard Zingerman55108622023-03-25 04:54:46 +0200112{
113 struct test_loader tester = {};
114 __u64 old_caps;
115 int err;
116
117 /* test_verifier tests are executed w/o CAP_SYS_ADMIN, do the same here */
118 err = cap_disable_effective(1ULL << CAP_SYS_ADMIN, &old_caps);
119 if (err) {
120 PRINT_FAIL("failed to drop CAP_SYS_ADMIN: %i, %s\n", err, strerror(err));
121 return;
122 }
123
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300124 test_loader__set_pre_execution_cb(&tester, pre_execution_cb);
Eduard Zingerman55108622023-03-25 04:54:46 +0200125 test_loader__run_subtests(&tester, skel_name, elf_bytes_factory);
126 test_loader_fini(&tester);
127
128 err = cap_enable_effective(old_caps, NULL);
129 if (err)
130 PRINT_FAIL("failed to restore CAP_SYS_ADMIN: %i, %s\n", err, strerror(err));
131}
132
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300133#define RUN(skel) run_tests_aux(#skel, skel##__elf_bytes, NULL)
Eduard Zingerman9d0f1562023-03-25 04:54:47 +0200134
135void test_verifier_and(void) { RUN(verifier_and); }
Alexei Starovoitov80a41292024-03-07 17:08:10 -0800136void test_verifier_arena(void) { RUN(verifier_arena); }
Alexei Starovoitova90c5842024-03-14 19:18:34 -0700137void test_verifier_arena_large(void) { RUN(verifier_arena_large); }
Eduard Zingerman0ccbe492023-03-25 04:54:49 +0200138void test_verifier_basic_stack(void) { RUN(verifier_basic_stack); }
Daniel Xuf04f2ce2023-12-11 13:20:09 -0700139void test_verifier_bitfield_write(void) { RUN(verifier_bitfield_write); }
Eduard Zingermanc9233652023-04-21 20:42:12 +0300140void test_verifier_bounds(void) { RUN(verifier_bounds); }
Eduard Zingerman7605f942023-03-25 04:54:50 +0200141void test_verifier_bounds_deduction(void) { RUN(verifier_bounds_deduction); }
Yonghong Songaec08d62023-04-06 09:45:00 -0700142void test_verifier_bounds_deduction_non_const(void) { RUN(verifier_bounds_deduction_non_const); }
Eduard Zingermanb14a7022023-03-25 04:54:51 +0200143void test_verifier_bounds_mix_sign_unsign(void) { RUN(verifier_bounds_mix_sign_unsign); }
Eduard Zingerman965a3f92023-04-21 20:42:13 +0300144void test_verifier_bpf_get_stack(void) { RUN(verifier_bpf_get_stack); }
Yonghong Song79dbabc2023-07-27 18:13:14 -0700145void test_verifier_bswap(void) { RUN(verifier_bswap); }
Eduard Zingerman37467c72023-04-21 20:42:14 +0300146void test_verifier_btf_ctx_access(void) { RUN(verifier_btf_ctx_access); }
Andrii Nakryikof0a50562023-12-14 17:13:34 -0800147void test_verifier_btf_unreliable_prog(void) { RUN(verifier_btf_unreliable_prog); }
Eduard Zingerman2f2047c2023-03-25 04:54:52 +0200148void test_verifier_cfg(void) { RUN(verifier_cfg); }
Eduard Zingerman047687a2023-03-25 04:54:53 +0200149void test_verifier_cgroup_inv_retcode(void) { RUN(verifier_cgroup_inv_retcode); }
Eduard Zingermanb1b63722023-03-25 04:54:54 +0200150void test_verifier_cgroup_skb(void) { RUN(verifier_cgroup_skb); }
Eduard Zingerman8f16f3c2023-03-25 04:54:55 +0200151void test_verifier_cgroup_storage(void) { RUN(verifier_cgroup_storage); }
Daniel Borkmann2e3f0662024-09-13 21:17:53 +0200152void test_verifier_const(void) { RUN(verifier_const); }
Eduard Zingermana2777ea2023-03-25 04:54:56 +0200153void test_verifier_const_or(void) { RUN(verifier_const_or); }
Eduard Zingermanfcd36962023-04-21 20:42:15 +0300154void test_verifier_ctx(void) { RUN(verifier_ctx); }
Eduard Zingermana58475a2023-03-25 04:54:57 +0200155void test_verifier_ctx_sk_msg(void) { RUN(verifier_ctx_sk_msg); }
Eduard Zingerman60802802023-04-21 20:42:16 +0300156void test_verifier_d_path(void) { RUN(verifier_d_path); }
Eduard Zingerman0a372c92023-04-21 20:42:17 +0300157void test_verifier_direct_packet_access(void) { RUN(verifier_direct_packet_access); }
Eduard Zingerman84988472023-03-25 04:54:58 +0200158void test_verifier_direct_stack_access_wraparound(void) { RUN(verifier_direct_stack_access_wraparound); }
Eduard Zingerman01a09252023-03-25 04:54:59 +0200159void test_verifier_div0(void) { RUN(verifier_div0); }
Eduard Zingerman9553de72023-03-25 04:55:00 +0200160void test_verifier_div_overflow(void) { RUN(verifier_div_overflow); }
Andrii Nakryikoe8a339b2023-11-23 19:59:37 -0800161void test_verifier_global_subprogs(void) { RUN(verifier_global_subprogs); }
Andrii Nakryikoc3812032024-01-29 16:06:48 -0800162void test_verifier_global_ptr_args(void) { RUN(verifier_global_ptr_args); }
Yonghong Song613dad42023-07-27 18:13:29 -0700163void test_verifier_gotol(void) { RUN(verifier_gotol); }
Eduard Zingermanb37d7762023-03-25 04:55:01 +0200164void test_verifier_helper_access_var_len(void) { RUN(verifier_helper_access_var_len); }
Eduard Zingermanfb179fe2023-03-25 04:55:02 +0200165void test_verifier_helper_packet_access(void) { RUN(verifier_helper_packet_access); }
Eduard Zingerman77aa2562023-03-25 04:55:03 +0200166void test_verifier_helper_restricted(void) { RUN(verifier_helper_restricted); }
Eduard Zingermanecc42482023-03-25 04:55:04 +0200167void test_verifier_helper_value_access(void) { RUN(verifier_helper_value_access); }
Eduard Zingerman01481e62023-03-25 04:55:05 +0200168void test_verifier_int_ptr(void) { RUN(verifier_int_ptr); }
Eduard Zingerman958465e22023-11-21 04:06:57 +0200169void test_verifier_iterating_callbacks(void) { RUN(verifier_iterating_callbacks); }
Eduard Zingermana5828e32023-04-21 20:42:18 +0300170void test_verifier_jeq_infer_not_null(void) { RUN(verifier_jeq_infer_not_null); }
Yonghong Songeff5b5f2024-09-04 15:12:56 -0700171void test_verifier_jit_convergence(void) { RUN(verifier_jit_convergence); }
Eduard Zingermane2978752023-03-25 04:55:06 +0200172void test_verifier_ld_ind(void) { RUN(verifier_ld_ind); }
Yonghong Song147c8f42023-07-27 18:13:04 -0700173void test_verifier_ldsx(void) { RUN(verifier_ldsx); }
Eduard Zingerman583c7ce2023-03-25 04:55:07 +0200174void test_verifier_leak_ptr(void) { RUN(verifier_leak_ptr); }
Daniel Borkmanndb123e42024-10-16 15:49:13 +0200175void test_verifier_linked_scalars(void) { RUN(verifier_linked_scalars); }
Eduard Zingermana6fc14d2023-04-21 20:42:19 +0300176void test_verifier_loops1(void) { RUN(verifier_loops1); }
Eduard Zingermanb427ca52023-04-21 20:42:20 +0300177void test_verifier_lwt(void) { RUN(verifier_lwt); }
Eduard Zingerman4a400ef2023-04-21 20:42:21 +0300178void test_verifier_map_in_map(void) { RUN(verifier_map_in_map); }
Eduard Zingermancaf345c2023-03-25 04:55:08 +0200179void test_verifier_map_ptr(void) { RUN(verifier_map_ptr); }
Eduard Zingermanaee17792023-04-21 20:42:22 +0300180void test_verifier_map_ptr_mixing(void) { RUN(verifier_map_ptr_mixing); }
Eduard Zingerman05e474e2023-03-25 04:55:09 +0200181void test_verifier_map_ret_val(void) { RUN(verifier_map_ret_val); }
Eduard Zingermanade3f082023-03-25 04:55:10 +0200182void test_verifier_masking(void) { RUN(verifier_masking); }
Eduard Zingerman65428312023-03-25 04:55:11 +0200183void test_verifier_meta_access(void) { RUN(verifier_meta_access); }
Yonghong Songf02ec3ff2023-07-27 18:13:09 -0700184void test_verifier_movsx(void) { RUN(verifier_movsx); }
Florian Westphal006c0e42023-04-21 19:03:00 +0200185void test_verifier_netfilter_ctx(void) { RUN(verifier_netfilter_ctx); }
186void test_verifier_netfilter_retcode(void) { RUN(verifier_netfilter_retcode); }
Eduard Zingermanadec67d2024-08-22 01:41:08 -0700187void test_verifier_bpf_fastcall(void) { RUN(verifier_bpf_fastcall); }
Daniel Borkmannceb65eb2024-06-13 13:53:10 +0200188void test_verifier_or_jmp32_k(void) { RUN(verifier_or_jmp32_k); }
Shung-Hsi Yu3c419712023-11-02 13:39:05 +0800189void test_verifier_precision(void) { RUN(verifier_precision); }
Eduard Zingerman35150202023-04-21 23:45:14 +0300190void test_verifier_prevent_map_lookup(void) { RUN(verifier_prevent_map_lookup); }
Eduard Zingerman5a77a012023-03-25 04:55:12 +0200191void test_verifier_raw_stack(void) { RUN(verifier_raw_stack); }
Eduard Zingerman18cdc2b2023-03-25 04:55:13 +0200192void test_verifier_raw_tp_writable(void) { RUN(verifier_raw_tp_writable); }
Yonghong Song49859de2023-04-17 15:21:39 -0700193void test_verifier_reg_equal(void) { RUN(verifier_reg_equal); }
Eduard Zingerman8be63272023-04-21 20:42:25 +0300194void test_verifier_ref_tracking(void) { RUN(verifier_ref_tracking); }
Eduard Zingerman16a42572023-04-21 20:42:26 +0300195void test_verifier_regalloc(void) { RUN(verifier_regalloc); }
Eduard Zingermanb7e42032023-03-25 04:55:14 +0200196void test_verifier_ringbuf(void) { RUN(verifier_ringbuf); }
Eduard Zingerman65222842023-04-21 20:42:27 +0300197void test_verifier_runtime_jit(void) { RUN(verifier_runtime_jit); }
Eduard Zingermandec02022023-06-13 18:38:22 +0300198void test_verifier_scalar_ids(void) { RUN(verifier_scalar_ids); }
Yonghong Songde1c2682023-07-27 18:13:21 -0700199void test_verifier_sdiv(void) { RUN(verifier_sdiv); }
Eduard Zingerman034d9ad2023-04-21 20:42:28 +0300200void test_verifier_search_pruning(void) { RUN(verifier_search_pruning); }
Eduard Zingerman426fc0e2023-04-21 20:42:29 +0300201void test_verifier_sock(void) { RUN(verifier_sock); }
Jordan Rife73964e92024-05-10 14:02:18 -0500202void test_verifier_sock_addr(void) { RUN(verifier_sock_addr); }
Jakub Sitnickia63bf552024-05-27 13:20:09 +0200203void test_verifier_sockmap_mutate(void) { RUN(verifier_sockmap_mutate); }
Eduard Zingermanf4fe3cf2023-03-25 04:55:15 +0200204void test_verifier_spill_fill(void) { RUN(verifier_spill_fill); }
Eduard Zingermanf323a812023-04-21 20:42:30 +0300205void test_verifier_spin_lock(void) { RUN(verifier_spin_lock); }
Eduard Zingermanedff37b2023-03-25 04:55:16 +0200206void test_verifier_stack_ptr(void) { RUN(verifier_stack_ptr); }
Andrii Nakryiko3ef3d212023-05-04 21:33:16 -0700207void test_verifier_subprog_precision(void) { RUN(verifier_subprog_precision); }
Eduard Zingerman81d1d6d2023-04-21 20:42:31 +0300208void test_verifier_subreg(void) { RUN(verifier_subreg); }
Eduard Zingermane5bdd6a2024-08-20 03:23:56 -0700209void test_verifier_tailcall_jit(void) { RUN(verifier_tailcall_jit); }
Stanislav Fomichev2597a252023-06-26 14:25:22 -0700210void test_verifier_typedef(void) { RUN(verifier_typedef); }
Eduard Zingermanab839a52023-03-25 04:55:17 +0200211void test_verifier_uninit(void) { RUN(verifier_uninit); }
Eduard Zingerman82887c22023-04-21 20:42:32 +0300212void test_verifier_unpriv(void) { RUN(verifier_unpriv); }
213void test_verifier_unpriv_perf(void) { RUN(verifier_unpriv_perf); }
Eduard Zingerman03391492023-03-25 04:55:18 +0200214void test_verifier_value_adj_spill(void) { RUN(verifier_value_adj_spill); }
Eduard Zingerman8f59e872023-03-25 04:55:19 +0200215void test_verifier_value(void) { RUN(verifier_value); }
Eduard Zingermanefe25a32023-04-21 20:42:33 +0300216void test_verifier_value_illegal_alu(void) { RUN(verifier_value_illegal_alu); }
Eduard Zingermand3305282023-03-25 04:55:20 +0200217void test_verifier_value_or_null(void) { RUN(verifier_value_or_null); }
Eduard Zingermand15f5b62023-03-25 04:55:21 +0200218void test_verifier_var_off(void) { RUN(verifier_var_off); }
Matt Bobrowski2b399b92024-07-31 11:08:33 +0000219void test_verifier_vfs_accept(void) { RUN(verifier_vfs_accept); }
Matt Bobrowskiff358ada2024-07-31 11:08:32 +0000220void test_verifier_vfs_reject(void) { RUN(verifier_vfs_reject); }
Eduard Zingermana8036ae2023-03-25 04:55:22 +0200221void test_verifier_xadd(void) { RUN(verifier_xadd); }
Eduard Zingermanffb515c2023-03-25 04:55:23 +0200222void test_verifier_xdp(void) { RUN(verifier_xdp); }
Eduard Zingerman6e9e1412023-03-28 05:08:12 +0300223void test_verifier_xdp_direct_packet_access(void) { RUN(verifier_xdp_direct_packet_access); }
Yafang Shao6ba7acd2024-05-17 10:30:34 +0800224void test_verifier_bits_iter(void) { RUN(verifier_bits_iter); }
Xu Kuohai04d82432024-07-19 19:00:59 +0800225void test_verifier_lsm(void) { RUN(verifier_lsm); }
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300226
Daniel Borkmann82bbe132024-10-21 17:28:09 +0200227void test_verifier_mtu(void)
228{
229 __u64 caps = 0;
230 int ret;
231
232 /* In case CAP_BPF and CAP_PERFMON is not set */
233 ret = cap_enable_effective(1ULL << CAP_BPF | 1ULL << CAP_NET_ADMIN, &caps);
234 if (!ASSERT_OK(ret, "set_cap_bpf_cap_net_admin"))
235 return;
236 ret = cap_disable_effective(1ULL << CAP_SYS_ADMIN | 1ULL << CAP_PERFMON, NULL);
237 if (!ASSERT_OK(ret, "disable_cap_sys_admin"))
238 goto restore_cap;
239 RUN(verifier_mtu);
240restore_cap:
241 if (caps)
242 cap_enable_effective(caps, NULL);
243}
244
Eduard Zingerman4db10a8242023-04-21 20:42:34 +0300245static int init_test_val_map(struct bpf_object *obj, char *map_name)
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300246{
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300247 struct test_val value = {
248 .index = (6 + 1) * sizeof(int),
249 .foo[6] = 0xabcdef12,
250 };
Eduard Zingerman4db10a8242023-04-21 20:42:34 +0300251 struct bpf_map *map;
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300252 int err, key = 0;
253
Eduard Zingerman4db10a8242023-04-21 20:42:34 +0300254 map = bpf_object__find_map_by_name(obj, map_name);
255 if (!map) {
256 PRINT_FAIL("Can't find map '%s'\n", map_name);
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300257 return -EINVAL;
Eduard Zingerman4db10a8242023-04-21 20:42:34 +0300258 }
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300259
Eduard Zingerman4db10a8242023-04-21 20:42:34 +0300260 err = bpf_map_update_elem(bpf_map__fd(map), &key, &value, 0);
261 if (err) {
262 PRINT_FAIL("Error while updating map '%s': %d\n", map_name, err);
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300263 return err;
Eduard Zingerman4db10a8242023-04-21 20:42:34 +0300264 }
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300265
266 return 0;
267}
268
Eduard Zingerman4db10a8242023-04-21 20:42:34 +0300269static int init_array_access_maps(struct bpf_object *obj)
270{
271 return init_test_val_map(obj, "map_array_ro");
272}
273
Eduard Zingermancbb110b2023-04-21 02:23:17 +0300274void test_verifier_array_access(void)
275{
276 run_tests_aux("verifier_array_access",
277 verifier_array_access__elf_bytes,
278 init_array_access_maps);
279}
Eduard Zingerman4db10a8242023-04-21 20:42:34 +0300280
281static int init_value_ptr_arith_maps(struct bpf_object *obj)
282{
283 return init_test_val_map(obj, "map_array_48b");
284}
285
286void test_verifier_value_ptr_arith(void)
287{
288 run_tests_aux("verifier_value_ptr_arith",
289 verifier_value_ptr_arith__elf_bytes,
290 init_value_ptr_arith_maps);
291}