函数逻辑报告 |
Source Code:kernel\bpf\verifier.c |
Create Date:2022-07-27 14:13:11 |
Last Modify:2022-05-19 20:02:10 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:check_map_func_compatibility
函数原型:static int check_map_func_compatibility(struct bpf_verifier_env *env, struct bpf_map *map, int func_id)
返回类型:int
参数:
类型 | 参数 | 名称 |
---|---|---|
struct bpf_verifier_env * | env | |
struct bpf_map * | map | |
int | func_id |
3632 | 如果非map则返回:0 |
3637 | 当:map_type恒等于BPF_MAP_TYPE_PROG_ARRAY |
3638 | 如果func_id不等于BPF_FUNC_tail_call则转到:error |
3640 | 退出 |
3642 | 如果func_id不等于BPF_FUNC_perf_event_read且func_id不等于BPF_FUNC_perf_event_output且func_id不等于BPF_FUNC_skb_output且func_id不等于BPF_FUNC_perf_event_read_value则转到:error |
3647 | 退出 |
3648 | 当:map_type恒等于BPF_MAP_TYPE_STACK_TRACE |
3649 | 如果func_id不等于BPF_FUNC_get_stackid则转到:error |
3651 | 退出 |
3652 | 当:map_type恒等于BPF_MAP_TYPE_CGROUP_ARRAY |
3656 | 退出 |
3657 | 当:map_type恒等于BPF_MAP_TYPE_CGROUP_STORAGE |
3659 | 如果func_id不等于BPF_FUNC_get_local_storage则转到:error |
3661 | 退出 |
3662 | 当:map_type恒等于BPF_MAP_TYPE_DEVMAP |
3663 | 当:map_type恒等于BPF_MAP_TYPE_DEVMAP_HASH |
3664 | 如果func_id不等于BPF_FUNC_redirect_map且func_id不等于BPF_FUNC_map_lookup_elem则转到:error |
3667 | 退出 |
3671 | 当:map_type恒等于BPF_MAP_TYPE_CPUMAP |
3672 | 如果func_id不等于BPF_FUNC_redirect_map则转到:error |
3674 | 退出 |
3675 | 当:map_type恒等于BPF_MAP_TYPE_XSKMAP |
3676 | 如果func_id不等于BPF_FUNC_redirect_map且func_id不等于BPF_FUNC_map_lookup_elem则转到:error |
3679 | 退出 |
3680 | 当:map_type恒等于BPF_MAP_TYPE_ARRAY_OF_MAPS |
3681 | 当:map_type恒等于BPF_MAP_TYPE_HASH_OF_MAPS |
3682 | 如果func_id不等于BPF_FUNC_map_lookup_elem则转到:error |
3684 | 退出 |
3685 | 当:map_type恒等于BPF_MAP_TYPE_SOCKMAP |
3686 | 如果func_id不等于BPF_FUNC_sk_redirect_map且func_id不等于BPF_FUNC_sock_map_update且func_id不等于BPF_FUNC_map_delete_elem且func_id不等于BPF_FUNC_msg_redirect_map则转到:error |
3691 | 退出 |
3692 | 当:map_type恒等于BPF_MAP_TYPE_SOCKHASH |
3693 | 如果func_id不等于BPF_FUNC_sk_redirect_hash且func_id不等于BPF_FUNC_sock_hash_update且func_id不等于BPF_FUNC_map_delete_elem且func_id不等于BPF_FUNC_msg_redirect_hash则转到:error |
3698 | 退出 |
3700 | 如果func_id不等于BPF_FUNC_sk_select_reuseport则转到:error |
3702 | 退出 |
3703 | 当:map_type恒等于BPF_MAP_TYPE_QUEUE |
3704 | 当:map_type恒等于BPF_MAP_TYPE_STACK |
3705 | 如果func_id不等于BPF_FUNC_map_peek_elem且func_id不等于BPF_FUNC_map_pop_elem且func_id不等于BPF_FUNC_map_push_elem则转到:error |
3709 | 退出 |
3710 | 当:map_type恒等于BPF_MAP_TYPE_SK_STORAGE |
3711 | 如果func_id不等于BPF_FUNC_sk_storage_get且func_id不等于BPF_FUNC_sk_storage_delete则转到:error |
3714 | 退出 |
3715 | 默认 |
3716 | 退出 |
3721 | 当:func_id恒等于BPF_FUNC_tail_call |
3729 | 当:func_id恒等于BPF_FUNC_perf_event_read |
3730 | 当:func_id恒等于BPF_FUNC_perf_event_output |
3732 | 当:func_id恒等于BPF_FUNC_skb_output |
3733 | 如果map_type不等于BPF_MAP_TYPE_PERF_EVENT_ARRAY则转到:error |
3735 | 退出 |
3736 | 当:func_id恒等于BPF_FUNC_get_stackid |
3737 | 如果map_type不等于BPF_MAP_TYPE_STACK_TRACE则转到:error |
3739 | 退出 |
3741 | 当:func_id恒等于BPF_FUNC_skb_under_cgroup |
3742 | 如果map_type不等于BPF_MAP_TYPE_CGROUP_ARRAY则转到:error |
3744 | 退出 |
3745 | 当:func_id恒等于BPF_FUNC_redirect_map |
3746 | 如果map_type不等于BPF_MAP_TYPE_DEVMAP且map_type不等于BPF_MAP_TYPE_DEVMAP_HASH且map_type不等于BPF_MAP_TYPE_CPUMAP且map_type不等于BPF_MAP_TYPE_XSKMAP则转到:error |
3751 | 退出 |
3752 | 当:func_id恒等于BPF_FUNC_sk_redirect_map |
3753 | 当:func_id恒等于BPF_FUNC_msg_redirect_map |
3754 | 当:func_id恒等于BPF_FUNC_sock_map_update |
3755 | 如果map_type不等于BPF_MAP_TYPE_SOCKMAP则转到:error |
3757 | 退出 |
3758 | 当:func_id恒等于BPF_FUNC_sk_redirect_hash |
3759 | 当:func_id恒等于BPF_FUNC_msg_redirect_hash |
3760 | 当:func_id恒等于BPF_FUNC_sock_hash_update |
3761 | 如果map_type不等于BPF_MAP_TYPE_SOCKHASH则转到:error |
3763 | 退出 |
3764 | 当:func_id恒等于BPF_FUNC_get_local_storage |
3765 | 如果map_type不等于BPF_MAP_TYPE_CGROUP_STORAGE且map_type不等于BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE则转到:error |
3768 | 退出 |
3769 | 当:func_id恒等于BPF_FUNC_sk_select_reuseport |
3770 | 如果map_type不等于BPF_MAP_TYPE_REUSEPORT_SOCKARRAY则转到:error |
3772 | 退出 |
3773 | 当:func_id恒等于BPF_FUNC_map_peek_elem |
3774 | 当:func_id恒等于BPF_FUNC_map_pop_elem |
3775 | 当:func_id恒等于BPF_FUNC_map_push_elem |
3776 | 如果map_type不等于BPF_MAP_TYPE_QUEUE且map_type不等于BPF_MAP_TYPE_STACK则转到:error |
3779 | 退出 |
3780 | 当:func_id恒等于BPF_FUNC_sk_storage_get |
3781 | 当:func_id恒等于BPF_FUNC_sk_storage_delete |
3782 | 如果map_type不等于BPF_MAP_TYPE_SK_STORAGE则转到:error |
3784 | 退出 |
3785 | 默认 |
3786 | 退出 |
3789 | 返回:0 |
3790 | error : |
3791 | verbose(env, "cannot pass map_type %d into func %s#%d\n", map_type, func_id_name(func_id), func_id) |
3793 | 返回:负EINVAL |
名称 | 描述 |
---|---|
check_helper_call |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |