| Function report | 
| Source Code: kernel\bpf\verifier.c | Create Date:2022-07-28 13:02:27 | 
| Last Modify:2022-05-19 20:02:10 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:-recursive depth-first-search to detect loops in BPF program* loop == back-edge in directed graph
Proto:static int check_cfg(struct bpf_verifier_env *env)
Type:int
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| struct bpf_verifier_env * | env | 
| 6539 | insn_cnt = Number of filter blocks | 
| 6541 | ret = 0 | 
| 6544 | insn_state = insn_state = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL) | 
| 6545 | If Not insn_state Then Return -ENOMEM | 
| 6548 | insn_stack = insn_stack = kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL) | 
| 6549 | If Not insn_stack Then | 
| 6550 | kvfree(insn_state) | 
| 6551 | Return -ENOMEM | 
| 6554 | insn_state[0] = DISCOVERED | 
| 6555 | insn_stack[0] = 0 | 
| 6556 | cur_stack = 1 | 
| 6558 | peek_stack : | 
| 6559 | If cur_stack == 0 Then Go to check_state | 
| 6561 | t = insn_stack[cur_stack - 1] | 
| 6563 | If Instruction classes ( opcode ) == BPF_JMP || Instruction classes ( opcode ) == jmp mode in word width Then | 
| 6565 | opcode = alu/jmp fields ( opcode ) | 
| 6567 | If opcode == unction return Then | 
| 6568 | Go to mark_explored | 
| 6569 | Else if opcode == unction call Then | 
| 6571 | If ret == 1 Then Go to peek_stack | 
| 6575 | If t + 1 < insn_cnt Then init_explored_state(env, t + 1) | 
| 6578 | init_explored_state(env, t) | 
| 6581 | If ret == 1 Then Go to peek_stack | 
| 6594 | If ret == 1 Then Go to peek_stack | 
| 6602 | init_explored_state(env, t + signed offset + 1) | 
| 6606 | If t + 1 < insn_cnt Then init_explored_state(env, t + 1) | 
| 6608 | Else | 
| 6610 | init_explored_state(env, t) | 
| 6612 | If ret == 1 Then Go to peek_stack | 
| 6618 | If ret == 1 Then Go to peek_stack | 
| 6623 | Else | 
| 6628 | If ret == 1 Then Go to peek_stack | 
| 6634 | mark_explored : | 
| 6635 | insn_state[t] = EXPLORED | 
| 6636 | If cur_stack-- <= 0 Then | 
| 6641 | Go to peek_stack | 
| 6643 | check_state : | 
| 6645 | If insn_state[i] != EXPLORED Then | 
| 6651 | ret = 0 | 
| 6653 | err_free : | 
| 6654 | kvfree(insn_state) | 
| 6655 | kvfree(insn_stack) | 
| 6656 | insn_state = insn_stack = NULL | 
| 6657 | Return ret | 
| Name | Describe | 
|---|---|
| bpf_check | 
| 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 |