函数逻辑报告 |
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 插件可实现:逻辑报告 代码生成和批量转换代码 |