函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

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

函数名称:For given verifier state backtrack_insn() is called from the last insn to* the first insn. Its purpose is to compute a bitmask of registers and* stack slots that needs precision in the parent verifier state.

函数原型:static int backtrack_insn(struct bpf_verifier_env *env, int idx, u32 *reg_mask, u64 *stack_mask)

返回类型:int

参数:

类型参数名称
struct bpf_verifier_env *env
intidx
u32 *reg_mask
u64 *stack_mask
1512  const struct bpf_insn_cbs cbs = {cb_print = verbose, private_data = env, }
1516  insn等于insnsiidx
1517  class等于Instruction classes ( opcode )
1518  opcode等于alu/jmp fields ( opcode )
1519  mode等于BPF BPF_DW 0x18 64-bit ( opcode )
1520  dreg等于1u左移 dest register
1521  sreg等于1u左移 source register
1524  如果 opcode 恒等于0则返回:0
1526  如果level按位与BPF_LOG_LEVEL
1527  verbose(env, "regs=%x stack=%llx before ", * reg_mask, * stack_mask)
1528  verbose(env, "%d: ", idx)
1529  print_bpf_insn( & cbs, insn, allow_ptr_leaks)
1532  如果class恒等于BPF_ALUclass恒等于alu mode in double word width
1533  如果非reg_mask按位与dreg的值则返回:0
1535  如果opcode恒等于mov reg to reg
1536  如果BPF_SRC( opcode )恒等于BPF_X
1541  reg_mask与等于dreg的反
1542  reg_mask或等于sreg
1543  否则
1550  reg_mask与等于dreg的反
1552  否则
1553  如果BPF_SRC( opcode )恒等于BPF_X
1558  reg_mask或等于sreg
1563  否则如果class恒等于BPF_LDX
1564  如果非reg_mask按位与dreg的值则返回:0
1566  reg_mask与等于dreg的反
1574  如果 source register 不等于BPF_REG_FP则返回:0
1576  如果ld/ldx fields ( opcode )不等于double word (64-bit) 则返回:0
1583  spi等于负 signed offset 减1的差除size of eBPF register in bytes
1584  如果spi大于等于64则
1585  verbose(env, "BUG spi %d\n", spi)
1586  WARN_ONCE(1, "verifier backtracking bug")
1587  返回:负EFAULT
1589  stack_mask或等于1ull左移spi
1590  否则如果class恒等于BPF_STXclass恒等于BPF_ST
1591  如果reg_mask按位与dreg则返回:负Operation is not supported
1598  如果 dest register 不等于BPF_REG_FP则返回:0
1600  如果ld/ldx fields ( opcode )不等于double word (64-bit) 则返回:0
1602  spi等于负 signed offset 减1的差除size of eBPF register in bytes
1603  如果spi大于等于64则
1604  verbose(env, "BUG spi %d\n", spi)
1605  WARN_ONCE(1, "verifier backtracking bug")
1606  返回:负EFAULT
1608  如果非stack_mask按位与1ull左移spi位的值则返回:0
1610  stack_mask与等于1ull左移spi位的值的反
1611  如果class恒等于BPF_STXreg_mask或等于sreg
1613  否则如果class恒等于BPF_JMPclass恒等于jmp mode in word width
1614  如果opcode恒等于unction call
1618  reg_mask与等于1的反
1619  如果reg_mask按位与0x3f则
1623  verbose(env, "BUG regs %x\n", * reg_mask)
1624  WARN_ONCE(1, "verifier backtracking bug")
1625  返回:负EFAULT
1627  否则如果opcode恒等于unction return
1628  返回:负Operation is not supported
1630  否则如果class恒等于BPF_LD
1631  如果非reg_mask按位与dreg的值则返回:0
1633  reg_mask与等于dreg的反
1638  如果mode恒等于BPF_INDmode恒等于BPF_ABS则返回:负Operation is not supported
1642  返回:0
调用者
名称描述
__mark_chain_precision