Function report | 
Source Code:kernel\bpf\verifier.c | 
Create Date:2022-07-28 13:02:20 | 
| Last Modify:2022-05-19 20:02:10 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:, w, e - match pseudo-code above:
Proto:static int push_insn(int t, int w, int e, struct bpf_verifier_env *env, bool loop_ok)
Type:int
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| int | t | index of current instruction | 
| int | w | next instruction | 
| int | e | edge | 
| struct bpf_verifier_env * | env | |
| bool | loop_ok | 
| 6489 | insn_stack = insn_stack | 
| 6490 | insn_state = insn_state | 
| 6492 | If edge == FALLTHROUGH && insn_state[ index of current instruction] >= (DISCOVERED | FALLTHROUGH) Then Return 0 | 
| 6495 | If edge == BRANCH && insn_state[ index of current instruction] >= (DISCOVERED | BRANCH) Then Return 0 | 
| 6498 | If next instruction < 0 || next instruction >= Number of filter blocks Then | 
| 6499 | verbose_linfo(env, index of current instruction, "%d: ", index of current instruction) | 
| 6500 | verbose(env, "jump out of range from insn %d to %d\n", index of current instruction, next instruction) | 
| 6501 | Return -EINVAL | 
| 6504 | If edge == BRANCH Then init_explored_state(env, next instruction) | 
| 6508 | If insn_state[ next instruction] == 0 Then | 
| 6510 | insn_state[ index of current instruction] = DISCOVERED | edge | 
| 6511 | insn_state[ next instruction] = DISCOVERED | 
| 6512 | If cur_stack >= Number of filter blocks Then Return -E2BIG | 
| 6514 | insn_stack[cur_stack++] = next instruction | 
| 6515 | Return 1 | 
| 6516 | Else if (insn_state[ next instruction] & 0xF0) == DISCOVERED Then | 
| 6517 | If loop_ok && allow_ptr_leaks Then Return 0 | 
| 6519 | verbose_linfo(env, index of current instruction, "%d: ", index of current instruction) | 
| 6520 | verbose_linfo(env, next instruction, "%d: ", next instruction) | 
| 6521 | verbose(env, "back-edge from insn %d to %d\n", index of current instruction, next instruction) | 
| 6522 | Return -EINVAL | 
| 6523 | Else if insn_state[ next instruction] == EXPLORED Then | 
| 6525 | insn_state[ index of current instruction] = DISCOVERED | edge | 
| 6526 | Else | 
| 6530 | Return 0 | 
| Name | Describe | 
|---|---|
| check_cfg | -recursive depth-first-search to detect loops in BPF program* loop == back-edge in directed graph | 
| 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  |