函数逻辑报告 |
Source Code:kernel\bpf\verifier.c |
Create Date:2022-07-27 14:19:32 |
Last Modify:2022-05-19 20:02:10 | Copyright©Brick |
首页 | 函数Tree |
注解内核,赢得工具 | 下载SCCT | English |
函数名称:vert load instructions that access fields of a context type into a* sequence of instructions that access fields of the underlying structure:* struct __sk_buff -> struct sk_buff* struct bpf_sock_ops -> struct sock
函数原型:static int convert_ctx_accesses(struct bpf_verifier_env *env)
返回类型:int
参数:
类型 | 参数 | 名称 |
---|---|---|
struct bpf_verifier_env * | env |
8749 | delta等于0 |
8750 | insn_cnt等于 Number of filter blocks |
8757 | 如果gen_prologue或seen_direct_write则 |
8777 | 如果bpf_prog_is_dev_bound( Auxiliary fields )则返回:0 |
8785 | 如果 opcode 恒等于BPF_LDX按位或BPF_MEM按位或8-bit 的值或 opcode 恒等于BPF_LDX按位或BPF_MEM按位或16-bit 的值或 opcode 恒等于BPF_LDX按位或BPF_MEM按位或32-bit 的值或 opcode 恒等于BPF_LDX按位或BPF_MEM按位或double word (64-bit) 的值则type等于BPF_READ |
8790 | 否则如果 opcode 恒等于BPF_STX按位或BPF_MEM按位或8-bit 的值或 opcode 恒等于BPF_STX按位或BPF_MEM按位或16-bit 的值或 opcode 恒等于BPF_STX按位或BPF_MEM按位或32-bit 的值或 opcode 恒等于BPF_STX按位或BPF_MEM按位或double word (64-bit) 的值则type等于BPF_WRITE |
8795 | 否则继续下一循环 |
8798 | 如果type恒等于BPF_WRITE且 stack slot to be cleared 则 |
8800 | struct bpf_insn patch[] = {Memory store, *(uint *) (dst_reg + off16) = imm32 (double word (64-bit) , BPF_REG_FP, stack slot to be cleared , 0), * insn, } |
8823 | 继续下一循环 |
8835 | 退出 |
8838 | 退出 |
8841 | 退出 |
8847 | opcode 等于BPF_LDX按位或unused opcode to mark special load instruction. Same as BPF_ABS 按位或ld/ldx fields ( opcode ) |
8848 | num_exentries自加 |
8849 | 继续下一循环 |
8850 | 默认 |
8851 | 继续下一循环 |
8855 | size等于BPF_LDST_BYTES(insn) |
8862 | is_narrower_load等于size小于ctx_field_size |
8864 | off等于 signed offset |
8865 | 如果is_narrower_load则 |
8874 | 如果ctx_field_size恒等于4则size_code等于32-bit |
8876 | 否则如果ctx_field_size恒等于8则size_code等于double word (64-bit) |
8879 | signed offset 等于off按位与size_default减1的差的反 |
8883 | target_size等于0 |
8884 | cnt等于convert_ctx_access(type, insn, insn_buf, BPF program being verified , & target_size) |
8892 | 如果is_narrower_load且size小于target_size则 |
8893 | shift等于bpf_ctx_narrow_access_offset(off, size, size_default)乘8 |
8895 | 如果ctx_field_size小于等于4则 |
8896 | 如果shift则insn_buf[cnt++]等于BPF_ALU32_IMM(BPF_RSH, dest register , shift) |
8900 | insn_buf[cnt++]等于BPF_ALU32_IMM(BPF_AND, dest register , (1 << size * 8) - 1) |
8902 | 否则 |
8903 | 如果shift则insn_buf[cnt++]等于ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 (BPF_RSH, dest register , shift) |
8907 | insn_buf[cnt++]等于ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 (BPF_AND, dest register , (1ULL << size * 8) - 1) |
8923 | 返回:0 |
名称 | 描述 |
---|---|
bpf_check |
源代码转换工具 开放的插件接口 | X |
---|---|
支持:c/c++/esqlc/java Oracle/Informix/Mysql 插件可实现:逻辑报告 代码生成和批量转换代码 |