Function report |
Source Code:kernel\bpf\verifier.c |
Create Date:2022-07-28 12:57:42 |
| Last Modify:2022-05-19 20:02:10 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:check_stack_read
Proto:static int check_stack_read(struct bpf_verifier_env *env, struct bpf_func_state *reg_state, int off, int size, int value_regno)
Type:int
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct bpf_verifier_env * | env | |
| struct bpf_func_state * | reg_state | func where register points to |
| int | off | |
| int | size | |
| int | value_regno |
| 2083 | vstate = current verifier state |
| 2084 | state = call stack tracking [curframe] |
| 2085 | slot = -off - 1 , spi = slot / size of eBPF register in bytes |
| 2089 | If allocated_stack <= slot Then |
| 2095 | reg = spilled_ptr |
| 2097 | If stype[0] == register spilled into stack Then |
| 2098 | If size != size of eBPF register in bytes Then |
| 2100 | verbose_linfo(env, insn_idx, "; ") |
| 2102 | Return -EACCES |
| 2104 | If value_regno >= 0 Then |
| 2105 | mark_reg_unknown(env, regs, value_regno) |
| 2109 | Return 0 |
| 2111 | When i < size of eBPF register in bytes cycle |
| 2112 | If stype[(slot - i) % size of eBPF register in bytes ] != register spilled into stack Then |
| 2118 | If value_regno >= 0 Then |
| 2120 | regs[value_regno] = reg |
| 2128 | Else |
| 2129 | zeros = 0 |
| 2132 | If stype[(slot - i) % size of eBPF register in bytes ] == BPF program wrote some data into this slot Then Continue |
| 2134 | If stype[(slot - i) % size of eBPF register in bytes ] == BPF program wrote constant zero Then |
| 2135 | zeros++ |
| 2136 | Continue |
| 2140 | Return -EACCES |
| 2143 | If value_regno >= 0 Then |
| 2148 | __mark_reg_const_zero( & regs[value_regno]) |
| 2160 | Else |
| 2162 | mark_reg_unknown(env, regs, value_regno) |
| 2167 | Return 0 |
| Name | Describe |
|---|---|
| check_mem_access | heck whether memory at (regno + off) is accessible for t = (read | write)* if t==write, value_regno is a register which value is stored into memory* if t==read, value_regno is a register which will receive the value from memory* if t==write && |
| Source code conversion tool public plug-in interface | X |
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |