Lines Matching defs:fn

4410                           const struct bpf_func_proto *fn)

4414 enum bpf_arg_type arg_type = fn->arg_type[arg];
4454 err = check_reg_type(env, regno, arg_type, fn->arg_btf_id[arg]);
4865 static bool check_raw_mode_ok(const struct bpf_func_proto *fn)
4869 if (fn->arg1_type == ARG_PTR_TO_UNINIT_MEM) {
4872 if (fn->arg2_type == ARG_PTR_TO_UNINIT_MEM) {
4875 if (fn->arg3_type == ARG_PTR_TO_UNINIT_MEM) {
4878 if (fn->arg4_type == ARG_PTR_TO_UNINIT_MEM) {
4881 if (fn->arg5_type == ARG_PTR_TO_UNINIT_MEM) {
4898 static bool check_arg_pair_ok(const struct bpf_func_proto *fn)
4905 if (arg_type_is_mem_size(fn->arg1_type) || arg_type_is_mem_ptr(fn->arg5_type) ||
4906 check_args_pair_invalid(fn->arg1_type, fn->arg2_type) ||
4907 check_args_pair_invalid(fn->arg2_type, fn->arg3_type) ||
4908 check_args_pair_invalid(fn->arg3_type, fn->arg4_type) ||
4909 check_args_pair_invalid(fn->arg4_type, fn->arg5_type)) {
4916 static bool check_refcount_ok(const struct bpf_func_proto *fn, int func_id)
4920 if (arg_type_may_be_refcounted(fn->arg1_type)) {
4923 if (arg_type_may_be_refcounted(fn->arg2_type)) {
4926 if (arg_type_may_be_refcounted(fn->arg3_type)) {
4929 if (arg_type_may_be_refcounted(fn->arg4_type)) {
4932 if (arg_type_may_be_refcounted(fn->arg5_type)) {
4949 static bool check_btf_id_ok(const struct bpf_func_proto *fn)
4953 for (i = 0; i < ARRAY_SIZE(fn->arg_type); i++) {
4954 if (fn->arg_type[i] == ARG_PTR_TO_BTF_ID && !fn->arg_btf_id[i]) {
4958 if (fn->arg_type[i] != ARG_PTR_TO_BTF_ID && fn->arg_btf_id[i]) {
4966 static int check_func_proto(const struct bpf_func_proto *fn, int func_id)
4968 return check_raw_mode_ok(fn) && check_arg_pair_ok(fn) && check_btf_id_ok(fn) && check_refcount_ok(fn, func_id)
5308 const struct bpf_func_proto *fn = NULL;
5323 fn = env->ops->get_func_proto(func_id, env->prog);
5325 if (!fn) {
5331 if (!env->prog->gpl_compatible && fn->gpl_only) {
5336 if (fn->allowed && !fn->allowed(env->prog)) {
5342 changes_data = bpf_helper_changes_pkt_data(fn->func);
5343 if (changes_data && fn->arg1_type != ARG_PTR_TO_CTX) {
5349 meta.pkt_access = fn->pkt_access;
5351 err = check_func_proto(fn, func_id);
5360 err = check_func_arg(env, i, &meta, fn);
5419 ret_type = fn->ret_type;
5420 ret_flag = type_flag(fn->ret_type);
5490 ret_btf_id = *fn->ret_btf_id;
5519 do_refine_retval_range(regs, fn->ret_type, func_id, &meta);
11229 const struct bpf_func_proto *fn;
11526 fn = env->ops->get_func_proto(insn->imm, env->prog);
11530 if (!fn->func) {
11534 insn->imm = fn->func - __bpf_call_base;