0001
0002
0003 #include <test_progs.h>
0004 static int libbpf_debug_print(enum libbpf_print_level level,
0005 const char *format, va_list args)
0006 {
0007 if (level != LIBBPF_DEBUG) {
0008 vprintf(format, args);
0009 return 0;
0010 }
0011
0012 if (!strstr(format, "verifier log"))
0013 return 0;
0014 vprintf("%s", args);
0015 return 0;
0016 }
0017
0018 extern int extra_prog_load_log_flags;
0019
0020 static int check_load(const char *file, enum bpf_prog_type type)
0021 {
0022 struct bpf_object *obj = NULL;
0023 struct bpf_program *prog;
0024 int err;
0025
0026 obj = bpf_object__open_file(file, NULL);
0027 err = libbpf_get_error(obj);
0028 if (err)
0029 return err;
0030
0031 prog = bpf_object__next_program(obj, NULL);
0032 if (!prog) {
0033 err = -ENOENT;
0034 goto err_out;
0035 }
0036
0037 bpf_program__set_type(prog, type);
0038 bpf_program__set_flags(prog, BPF_F_TEST_RND_HI32);
0039 bpf_program__set_log_level(prog, 4 | extra_prog_load_log_flags);
0040
0041 err = bpf_object__load(obj);
0042
0043 err_out:
0044 bpf_object__close(obj);
0045 return err;
0046 }
0047
0048 struct scale_test_def {
0049 const char *file;
0050 enum bpf_prog_type attach_type;
0051 bool fails;
0052 };
0053
0054 static void scale_test(const char *file,
0055 enum bpf_prog_type attach_type,
0056 bool should_fail)
0057 {
0058 libbpf_print_fn_t old_print_fn = NULL;
0059 int err;
0060
0061 if (env.verifier_stats) {
0062 test__force_log();
0063 old_print_fn = libbpf_set_print(libbpf_debug_print);
0064 }
0065
0066 err = check_load(file, attach_type);
0067 if (should_fail)
0068 ASSERT_ERR(err, "expect_error");
0069 else
0070 ASSERT_OK(err, "expect_success");
0071
0072 if (env.verifier_stats)
0073 libbpf_set_print(old_print_fn);
0074 }
0075
0076 void test_verif_scale1()
0077 {
0078 scale_test("test_verif_scale1.o", BPF_PROG_TYPE_SCHED_CLS, false);
0079 }
0080
0081 void test_verif_scale2()
0082 {
0083 scale_test("test_verif_scale2.o", BPF_PROG_TYPE_SCHED_CLS, false);
0084 }
0085
0086 void test_verif_scale3()
0087 {
0088 scale_test("test_verif_scale3.o", BPF_PROG_TYPE_SCHED_CLS, false);
0089 }
0090
0091 void test_verif_scale_pyperf_global()
0092 {
0093 scale_test("pyperf_global.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0094 }
0095
0096 void test_verif_scale_pyperf_subprogs()
0097 {
0098 scale_test("pyperf_subprogs.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0099 }
0100
0101 void test_verif_scale_pyperf50()
0102 {
0103
0104 scale_test("pyperf50.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0105 }
0106
0107 void test_verif_scale_pyperf100()
0108 {
0109
0110 scale_test("pyperf100.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0111 }
0112
0113 void test_verif_scale_pyperf180()
0114 {
0115
0116 scale_test("pyperf180.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0117 }
0118
0119 void test_verif_scale_pyperf600()
0120 {
0121
0122
0123
0124
0125
0126
0127 scale_test("pyperf600.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0128 }
0129
0130 void test_verif_scale_pyperf600_bpf_loop(void)
0131 {
0132
0133 scale_test("pyperf600_bpf_loop.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0134 }
0135
0136 void test_verif_scale_pyperf600_nounroll()
0137 {
0138
0139
0140
0141
0142
0143
0144 scale_test("pyperf600_nounroll.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0145 }
0146
0147 void test_verif_scale_loop1()
0148 {
0149 scale_test("loop1.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0150 }
0151
0152 void test_verif_scale_loop2()
0153 {
0154 scale_test("loop2.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0155 }
0156
0157 void test_verif_scale_loop3_fail()
0158 {
0159 scale_test("loop3.o", BPF_PROG_TYPE_RAW_TRACEPOINT, true );
0160 }
0161
0162 void test_verif_scale_loop4()
0163 {
0164 scale_test("loop4.o", BPF_PROG_TYPE_SCHED_CLS, false);
0165 }
0166
0167 void test_verif_scale_loop5()
0168 {
0169 scale_test("loop5.o", BPF_PROG_TYPE_SCHED_CLS, false);
0170 }
0171
0172 void test_verif_scale_loop6()
0173 {
0174 scale_test("loop6.o", BPF_PROG_TYPE_KPROBE, false);
0175 }
0176
0177 void test_verif_scale_strobemeta()
0178 {
0179
0180
0181
0182
0183 scale_test("strobemeta.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0184 }
0185
0186 void test_verif_scale_strobemeta_bpf_loop(void)
0187 {
0188
0189 scale_test("strobemeta_bpf_loop.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0190 }
0191
0192 void test_verif_scale_strobemeta_nounroll1()
0193 {
0194
0195 scale_test("strobemeta_nounroll1.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0196 }
0197
0198 void test_verif_scale_strobemeta_nounroll2()
0199 {
0200
0201 scale_test("strobemeta_nounroll2.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0202 }
0203
0204 void test_verif_scale_strobemeta_subprogs()
0205 {
0206
0207 scale_test("strobemeta_subprogs.o", BPF_PROG_TYPE_RAW_TRACEPOINT, false);
0208 }
0209
0210 void test_verif_scale_sysctl_loop1()
0211 {
0212 scale_test("test_sysctl_loop1.o", BPF_PROG_TYPE_CGROUP_SYSCTL, false);
0213 }
0214
0215 void test_verif_scale_sysctl_loop2()
0216 {
0217 scale_test("test_sysctl_loop2.o", BPF_PROG_TYPE_CGROUP_SYSCTL, false);
0218 }
0219
0220 void test_verif_scale_xdp_loop()
0221 {
0222 scale_test("test_xdp_loop.o", BPF_PROG_TYPE_XDP, false);
0223 }
0224
0225 void test_verif_scale_seg6_loop()
0226 {
0227 scale_test("test_seg6_loop.o", BPF_PROG_TYPE_LWT_SEG6LOCAL, false);
0228 }
0229
0230 void test_verif_twfw()
0231 {
0232 scale_test("twfw.o", BPF_PROG_TYPE_CGROUP_SKB, false);
0233 }