Lines Matching refs:env

8 #define verbose(env, fmt, args...) bpf_verifier_log_write(env, fmt, ##args)  argument
10 static int check_abnormal_return(struct bpf_verifier_env *env) in check_abnormal_return() argument
14 for (i = 1; i < env->subprog_cnt; i++) { in check_abnormal_return()
15 if (env->subprog_info[i].has_ld_abs) { in check_abnormal_return()
16 verbose(env, "LD_ABS is not allowed in subprogs without BTF\n"); in check_abnormal_return()
19 if (env->subprog_info[i].has_tail_call) { in check_abnormal_return()
20 verbose(env, "tail_call is not allowed in subprogs without BTF\n"); in check_abnormal_return()
31 static int prepare_btf_func(struct bpf_verifier_env *env, in prepare_btf_func() argument
47 if (check_abnormal_return(env)) in prepare_btf_func()
56 verbose(env, "invalid func info rec size %u\n", urec_size); in prepare_btf_func()
60 prog = env->prog; in prepare_btf_func()
74 verbose(env, "nonzero tailing record in func info"); in prepare_btf_func()
95 verbose(env, in prepare_btf_func()
101 verbose(env, in prepare_btf_func()
110 verbose(env, "invalid type id %d in func info", in prepare_btf_func()
133 static int check_btf_func(struct bpf_verifier_env *env, in check_btf_func() argument
149 if (check_abnormal_return(env)) in check_btf_func()
153 if (nfuncs != env->subprog_cnt) { in check_btf_func()
154 verbose(env, "number of funcs in func_info doesn't match number of subprogs\n"); in check_btf_func()
160 prog = env->prog; in check_btf_func()
175 if (env->subprog_info[i].start != krecord[i].insn_off) { in check_btf_func()
176 verbose(env, "func_info BTF section doesn't match subprog layout in BPF program\n"); in check_btf_func()
189 if (i && !scalar_return && env->subprog_info[i].has_ld_abs) { in check_btf_func()
190 verbose(env, "LD_ABS is only allowed in functions that return 'int'.\n"); in check_btf_func()
193 if (i && !scalar_return && env->subprog_info[i].has_tail_call) { in check_btf_func()
194 verbose(env, "tail_call is only allowed in functions that return 'int'.\n"); in check_btf_func()
198 env->subprog_info[i].name = btf_name_by_offset(btf, type->name_off); in check_btf_func()
213 static int check_btf_line(struct bpf_verifier_env *env, in check_btf_line() argument
245 prog = env->prog; in check_btf_line()
249 sub = env->subprog_info; in check_btf_line()
257 verbose(env, "nonzero tailing record in line_info"); in check_btf_line()
284 verbose(env, "Invalid line_info[%u].insn_off:%u (prev_offset:%u prog->len:%u)\n", in check_btf_line()
292 verbose(env, in check_btf_line()
301 verbose(env, "Invalid line_info[%u].line_off or .file_name_off\n", i); in check_btf_line()
306 if (s != env->subprog_cnt) { in check_btf_line()
311 verbose(env, "missing bpf_line_info for func#%u\n", s); in check_btf_line()
321 if (s != env->subprog_cnt) { in check_btf_line()
322 verbose(env, "missing bpf_line_info for %u funcs starting from func#%u\n", in check_btf_line()
323 env->subprog_cnt - s, s); in check_btf_line()
341 int bpf_check_core_relo(struct bpf_verifier_env *env, in bpf_check_core_relo() argument
347 struct bpf_prog *prog = env->prog; in bpf_check_core_relo()
350 .log = &env->log, in bpf_check_core_relo()
380 verbose(env, "nonzero tailing record in core_relo"); in bpf_check_core_relo()
395 verbose(env, "Invalid core_relo[%u].insn_off:%u prog->len:%u\n", in bpf_check_core_relo()
410 int bpf_prepare_btf_info(struct bpf_verifier_env *env, in bpf_prepare_btf_info() argument
418 if (check_abnormal_return(env)) in bpf_prepare_btf_info()
430 env->prog->aux->btf = btf; in bpf_prepare_btf_info()
432 err = prepare_btf_func(env, attr, uattr); in bpf_prepare_btf_info()
438 int bpf_check_btf_info(struct bpf_verifier_env *env, in bpf_check_btf_info() argument
445 if (check_abnormal_return(env)) in bpf_check_btf_info()
450 err = check_btf_func(env, attr, uattr); in bpf_check_btf_info()
454 err = check_btf_line(env, attr, uattr); in bpf_check_btf_info()