Lines Matching refs:func_id
259 int func_id; member
477 static bool is_acquire_function(enum bpf_func_id func_id, in is_acquire_function() argument
482 if (func_id == BPF_FUNC_sk_lookup_tcp || in is_acquire_function()
483 func_id == BPF_FUNC_sk_lookup_udp || in is_acquire_function()
484 func_id == BPF_FUNC_skc_lookup_tcp || in is_acquire_function()
485 func_id == BPF_FUNC_ringbuf_reserve || in is_acquire_function()
486 func_id == BPF_FUNC_kptr_xchg) in is_acquire_function()
489 if (func_id == BPF_FUNC_map_lookup_elem && in is_acquire_function()
497 static bool is_ptr_cast_function(enum bpf_func_id func_id) in is_ptr_cast_function() argument
499 return func_id == BPF_FUNC_tcp_sock || in is_ptr_cast_function()
500 func_id == BPF_FUNC_sk_fullsock || in is_ptr_cast_function()
501 func_id == BPF_FUNC_skc_to_tcp_sock || in is_ptr_cast_function()
502 func_id == BPF_FUNC_skc_to_tcp6_sock || in is_ptr_cast_function()
503 func_id == BPF_FUNC_skc_to_udp6_sock || in is_ptr_cast_function()
504 func_id == BPF_FUNC_skc_to_mptcp_sock || in is_ptr_cast_function()
505 func_id == BPF_FUNC_skc_to_tcp_timewait_sock || in is_ptr_cast_function()
506 func_id == BPF_FUNC_skc_to_tcp_request_sock; in is_ptr_cast_function()
509 static bool is_dynptr_ref_function(enum bpf_func_id func_id) in is_dynptr_ref_function() argument
511 return func_id == BPF_FUNC_dynptr_data; in is_dynptr_ref_function()
514 static bool helper_multiple_ref_obj_use(enum bpf_func_id func_id, in helper_multiple_ref_obj_use() argument
519 if (is_ptr_cast_function(func_id)) in helper_multiple_ref_obj_use()
521 if (is_acquire_function(func_id, map)) in helper_multiple_ref_obj_use()
523 if (is_dynptr_ref_function(func_id)) in helper_multiple_ref_obj_use()
1878 u32 func_id; member
1905 return d0->func_id - d1->func_id ?: d0->offset - d1->offset; in kfunc_desc_cmp_by_id_off()
1917 find_kfunc_desc(const struct bpf_prog *prog, u32 func_id, u16 offset) in find_kfunc_desc() argument
1920 .func_id = func_id, in find_kfunc_desc()
2016 static int add_kfunc_call(struct bpf_verifier_env *env, u32 func_id, s16 offset) in add_kfunc_call() argument
2065 if (!func_id && !offset) in add_kfunc_call()
2081 if (find_kfunc_desc(env->prog, func_id, offset)) in add_kfunc_call()
2089 func = btf_type_by_id(desc_btf, func_id); in add_kfunc_call()
2092 func_id); in add_kfunc_call()
2098 func_id); in add_kfunc_call()
2119 desc->func_id = func_id; in add_kfunc_call()
5628 if (meta->func_id == BPF_FUNC_map_peek_elem) in resolve_map_arg_type()
5798 meta->func_id != BPF_FUNC_sk_release; in check_reg_type()
5808 if (meta->func_id == BPF_FUNC_kptr_xchg) { in check_reg_type()
6058 if (meta->func_id == BPF_FUNC_spin_lock) { in check_func_arg()
6061 } else if (meta->func_id == BPF_FUNC_spin_unlock) { in check_func_arg()
6214 static bool may_update_sockmap(struct bpf_verifier_env *env, int func_id) in may_update_sockmap() argument
6219 if (func_id != BPF_FUNC_map_update_elem) in may_update_sockmap()
6253 struct bpf_map *map, int func_id) in check_map_func_compatibility() argument
6261 if (func_id != BPF_FUNC_tail_call) in check_map_func_compatibility()
6265 if (func_id != BPF_FUNC_perf_event_read && in check_map_func_compatibility()
6266 func_id != BPF_FUNC_perf_event_output && in check_map_func_compatibility()
6267 func_id != BPF_FUNC_skb_output && in check_map_func_compatibility()
6268 func_id != BPF_FUNC_perf_event_read_value && in check_map_func_compatibility()
6269 func_id != BPF_FUNC_xdp_output) in check_map_func_compatibility()
6273 if (func_id != BPF_FUNC_ringbuf_output && in check_map_func_compatibility()
6274 func_id != BPF_FUNC_ringbuf_reserve && in check_map_func_compatibility()
6275 func_id != BPF_FUNC_ringbuf_query && in check_map_func_compatibility()
6276 func_id != BPF_FUNC_ringbuf_reserve_dynptr && in check_map_func_compatibility()
6277 func_id != BPF_FUNC_ringbuf_submit_dynptr && in check_map_func_compatibility()
6278 func_id != BPF_FUNC_ringbuf_discard_dynptr) in check_map_func_compatibility()
6282 if (func_id != BPF_FUNC_user_ringbuf_drain) in check_map_func_compatibility()
6286 if (func_id != BPF_FUNC_get_stackid) in check_map_func_compatibility()
6290 if (func_id != BPF_FUNC_skb_under_cgroup && in check_map_func_compatibility()
6291 func_id != BPF_FUNC_current_task_under_cgroup) in check_map_func_compatibility()
6296 if (func_id != BPF_FUNC_get_local_storage) in check_map_func_compatibility()
6301 if (func_id != BPF_FUNC_redirect_map && in check_map_func_compatibility()
6302 func_id != BPF_FUNC_map_lookup_elem) in check_map_func_compatibility()
6309 if (func_id != BPF_FUNC_redirect_map) in check_map_func_compatibility()
6313 if (func_id != BPF_FUNC_redirect_map && in check_map_func_compatibility()
6314 func_id != BPF_FUNC_map_lookup_elem) in check_map_func_compatibility()
6319 if (func_id != BPF_FUNC_map_lookup_elem) in check_map_func_compatibility()
6323 if (func_id != BPF_FUNC_sk_redirect_map && in check_map_func_compatibility()
6324 func_id != BPF_FUNC_sock_map_update && in check_map_func_compatibility()
6325 func_id != BPF_FUNC_map_delete_elem && in check_map_func_compatibility()
6326 func_id != BPF_FUNC_msg_redirect_map && in check_map_func_compatibility()
6327 func_id != BPF_FUNC_sk_select_reuseport && in check_map_func_compatibility()
6328 func_id != BPF_FUNC_map_lookup_elem && in check_map_func_compatibility()
6329 !may_update_sockmap(env, func_id)) in check_map_func_compatibility()
6333 if (func_id != BPF_FUNC_sk_redirect_hash && in check_map_func_compatibility()
6334 func_id != BPF_FUNC_sock_hash_update && in check_map_func_compatibility()
6335 func_id != BPF_FUNC_map_delete_elem && in check_map_func_compatibility()
6336 func_id != BPF_FUNC_msg_redirect_hash && in check_map_func_compatibility()
6337 func_id != BPF_FUNC_sk_select_reuseport && in check_map_func_compatibility()
6338 func_id != BPF_FUNC_map_lookup_elem && in check_map_func_compatibility()
6339 !may_update_sockmap(env, func_id)) in check_map_func_compatibility()
6343 if (func_id != BPF_FUNC_sk_select_reuseport) in check_map_func_compatibility()
6348 if (func_id != BPF_FUNC_map_peek_elem && in check_map_func_compatibility()
6349 func_id != BPF_FUNC_map_pop_elem && in check_map_func_compatibility()
6350 func_id != BPF_FUNC_map_push_elem) in check_map_func_compatibility()
6354 if (func_id != BPF_FUNC_sk_storage_get && in check_map_func_compatibility()
6355 func_id != BPF_FUNC_sk_storage_delete) in check_map_func_compatibility()
6359 if (func_id != BPF_FUNC_inode_storage_get && in check_map_func_compatibility()
6360 func_id != BPF_FUNC_inode_storage_delete) in check_map_func_compatibility()
6364 if (func_id != BPF_FUNC_task_storage_get && in check_map_func_compatibility()
6365 func_id != BPF_FUNC_task_storage_delete) in check_map_func_compatibility()
6369 if (func_id != BPF_FUNC_map_peek_elem && in check_map_func_compatibility()
6370 func_id != BPF_FUNC_map_push_elem) in check_map_func_compatibility()
6378 switch (func_id) { in check_map_func_compatibility()
6487 map->map_type, func_id_name(func_id), func_id); in check_map_func_compatibility()
6564 static int check_func_proto(const struct bpf_func_proto *fn, int func_id) in check_func_proto() argument
7031 int func_id, in do_refine_retval_range() argument
7037 (func_id != BPF_FUNC_get_stack && in do_refine_retval_range()
7038 func_id != BPF_FUNC_get_task_stack && in do_refine_retval_range()
7039 func_id != BPF_FUNC_probe_read_str && in do_refine_retval_range()
7040 func_id != BPF_FUNC_probe_read_kernel_str && in do_refine_retval_range()
7041 func_id != BPF_FUNC_probe_read_user_str)) in do_refine_retval_range()
7053 int func_id, int insn_idx) in record_func_map() argument
7058 if (func_id != BPF_FUNC_tail_call && in record_func_map()
7059 func_id != BPF_FUNC_map_lookup_elem && in record_func_map()
7060 func_id != BPF_FUNC_map_update_elem && in record_func_map()
7061 func_id != BPF_FUNC_map_delete_elem && in record_func_map()
7062 func_id != BPF_FUNC_map_push_elem && in record_func_map()
7063 func_id != BPF_FUNC_map_pop_elem && in record_func_map()
7064 func_id != BPF_FUNC_map_peek_elem && in record_func_map()
7065 func_id != BPF_FUNC_for_each_map_elem && in record_func_map()
7066 func_id != BPF_FUNC_redirect_map && in record_func_map()
7067 func_id != BPF_FUNC_map_lookup_percpu_elem) in record_func_map()
7080 (func_id == BPF_FUNC_map_delete_elem || in record_func_map()
7081 func_id == BPF_FUNC_map_update_elem || in record_func_map()
7082 func_id == BPF_FUNC_map_push_elem || in record_func_map()
7083 func_id == BPF_FUNC_map_pop_elem)) { in record_func_map()
7099 int func_id, int insn_idx) in record_func_key() argument
7107 if (func_id != BPF_FUNC_tail_call) in record_func_key()
7193 int func_id = BPF_FUNC_get_func_ip; in check_get_func_ip() local
7198 func_id_name(func_id), func_id); in check_get_func_ip()
7207 func_id_name(func_id), func_id, type); in check_get_func_ip()
7257 int i, err, func_id; in check_helper_call() local
7260 func_id = insn->imm; in check_helper_call()
7261 if (func_id < 0 || func_id >= __BPF_FUNC_MAX_ID) { in check_helper_call()
7262 verbose(env, "invalid func %s#%d\n", func_id_name(func_id), in check_helper_call()
7263 func_id); in check_helper_call()
7268 fn = env->ops->get_func_proto(func_id, env->prog); in check_helper_call()
7270 verbose(env, "unknown func %s#%d\n", func_id_name(func_id), in check_helper_call()
7271 func_id); in check_helper_call()
7290 func_id_name(func_id), func_id); in check_helper_call()
7297 err = check_func_proto(fn, func_id); in check_helper_call()
7300 func_id_name(func_id), func_id); in check_helper_call()
7304 meta.func_id = func_id; in check_helper_call()
7312 err = record_func_map(env, &meta, func_id, insn_idx); in check_helper_call()
7316 err = record_func_key(env, &meta, func_id, insn_idx); in check_helper_call()
7361 func_id_name(func_id), func_id); in check_helper_call()
7366 switch (func_id) { in check_helper_call()
7554 if (func_id == BPF_FUNC_kptr_xchg) { in check_helper_call()
7561 func_id_name(func_id)); in check_helper_call()
7569 base_type(ret_type), func_id_name(func_id), in check_helper_call()
7570 func_id); in check_helper_call()
7579 base_type(ret_type), func_id_name(func_id), func_id); in check_helper_call()
7586 if (helper_multiple_ref_obj_use(func_id, meta.map_ptr)) { in check_helper_call()
7588 func_id_name(func_id), func_id); in check_helper_call()
7592 if (is_ptr_cast_function(func_id) || is_dynptr_ref_function(func_id)) { in check_helper_call()
7595 } else if (is_acquire_function(func_id, meta.map_ptr)) { in check_helper_call()
7606 do_refine_retval_range(regs, fn->ret_type, func_id, &meta); in check_helper_call()
7608 err = check_map_func_compatibility(env, meta.map_ptr, func_id); in check_helper_call()
7612 if ((func_id == BPF_FUNC_get_stack || in check_helper_call()
7613 func_id == BPF_FUNC_get_task_stack) && in check_helper_call()
7625 verbose(env, err_str, func_id_name(func_id), func_id); in check_helper_call()
7632 if (func_id == BPF_FUNC_get_stackid || func_id == BPF_FUNC_get_stack) in check_helper_call()
7635 if (func_id == BPF_FUNC_get_func_ip) { in check_helper_call()
7677 u32 i, nargs, func_id, ptr_type_id; in check_kfunc_call() local
7692 func_id = insn->imm; in check_kfunc_call()
7693 func = btf_type_by_id(desc_btf, func_id); in check_kfunc_call()
7697 kfunc_flags = btf_kfunc_id_set_contains(desc_btf, resolve_prog_type(env->prog), func_id); in check_kfunc_call()
7713 err = btf_check_kfunc_arg_match(env, desc_btf, func_id, regs, &meta); in check_kfunc_call()
7723 func_name, func_id); in check_kfunc_call()