函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:kernel\bpf\verifier.c Create Date:2022-07-27 14:16:48
Last Modify:2022-05-19 20:02:10 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:-recursive depth-first-search to detect loops in BPF program* loop == back-edge in directed graph

函数原型:static int check_cfg(struct bpf_verifier_env *env)

返回类型:int

参数:

类型参数名称
struct bpf_verifier_env *env
6538  insns等于insnsi
6539  insn_cnt等于 Number of filter blocks
6541  ret等于0
6544  insn_state等于insn_state等于kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL)
6545  如果非insn_state则返回:负ENOMEM
6548  insn_stack等于insn_stack等于kvcalloc(insn_cnt, sizeof(int), GFP_KERNEL)
6549  如果非insn_stack
6550  kvfree(insn_state)
6551  返回:负ENOMEM
6554  insn_state[0]等于DISCOVERED
6555  insn_stack[0]等于0
6556  cur_stack等于1
6558  peek_stack :
6559  如果cur_stack恒等于0则转到:check_state
6561  t等于insn_stack[cur_stack - 1]
6563  如果Instruction classes ( opcode )恒等于BPF_JMPInstruction classes ( opcode )恒等于jmp mode in word width
6565  opcode等于alu/jmp fields ( opcode )
6567  如果opcode恒等于unction return
6568  转到:mark_explored
6569  否则如果opcode恒等于unction call
6571  如果ret恒等于1则转到:peek_stack
6573  否则如果ret小于0则转到:err_free
6575  如果t加1小于insn_cntinit_explored_state(env, t + 1)
6581  如果ret恒等于1则转到:peek_stack
6583  否则如果ret小于0则转到:err_free
6586  否则如果opcode恒等于BPF_JA
6587  如果BPF_SRC( opcode )不等于BPF_K
6588  ret等于负EINVAL
6589  转到:err_free
6594  如果ret恒等于1则转到:peek_stack
6596  否则如果ret小于0则转到:err_free
6606  如果t加1小于insn_cntinit_explored_state(env, t + 1)
6608  否则
6612  如果ret恒等于1则转到:peek_stack
6614  否则如果ret小于0则转到:err_free
6618  如果ret恒等于1则转到:peek_stack
6620  否则如果ret小于0则转到:err_free
6623  否则
6627  ret等于, w, e - match pseudo-code above:
6628  如果ret恒等于1则转到:peek_stack
6630  否则如果ret小于0则转到:err_free
6634  mark_explored :
6635  insn_state[t]等于EXPLORED
6636  如果cur_stack自减小于等于0则
6637  verbose(env, "pop stack internal bug\n")
6638  ret等于负EFAULT
6639  转到:err_free
6641  转到:peek_stack
6643  check_state :
6644 i小于insn_cnt循环
6645  如果insn_state[i]不等于EXPLORED
6646  verbose(env, "unreachable insn %d\n", i)
6647  ret等于负EINVAL
6648  转到:err_free
6651  ret等于0
6653  err_free :
6654  kvfree(insn_state)
6655  kvfree(insn_stack)
6656  insn_state = insn_stack = NULL
6657  返回:ret
调用者
名称描述
bpf_check