root/tools/testing/selftests/bpf/verifier/map_ret_val.c

/* [<][>][^][v][top][bottom][index][help] */
   1 {
   2         "invalid map_fd for function call",
   3         .insns = {
   4         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
   5         BPF_ALU64_REG(BPF_MOV, BPF_REG_2, BPF_REG_10),
   6         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
   7         BPF_LD_MAP_FD(BPF_REG_1, 0),
   8         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_delete_elem),
   9         BPF_EXIT_INSN(),
  10         },
  11         .errstr = "fd 0 is not pointing to valid bpf_map",
  12         .result = REJECT,
  13 },
  14 {
  15         "don't check return value before access",
  16         .insns = {
  17         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
  18         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
  19         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
  20         BPF_LD_MAP_FD(BPF_REG_1, 0),
  21         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  22         BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 0),
  23         BPF_EXIT_INSN(),
  24         },
  25         .fixup_map_hash_8b = { 3 },
  26         .errstr = "R0 invalid mem access 'map_value_or_null'",
  27         .result = REJECT,
  28 },
  29 {
  30         "access memory with incorrect alignment",
  31         .insns = {
  32         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
  33         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
  34         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
  35         BPF_LD_MAP_FD(BPF_REG_1, 0),
  36         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  37         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 1),
  38         BPF_ST_MEM(BPF_DW, BPF_REG_0, 4, 0),
  39         BPF_EXIT_INSN(),
  40         },
  41         .fixup_map_hash_8b = { 3 },
  42         .errstr = "misaligned value access",
  43         .result = REJECT,
  44         .flags = F_LOAD_WITH_STRICT_ALIGNMENT,
  45 },
  46 {
  47         "sometimes access memory with incorrect alignment",
  48         .insns = {
  49         BPF_ST_MEM(BPF_DW, BPF_REG_10, -8, 0),
  50         BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
  51         BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8),
  52         BPF_LD_MAP_FD(BPF_REG_1, 0),
  53         BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
  54         BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
  55         BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 0),
  56         BPF_EXIT_INSN(),
  57         BPF_ST_MEM(BPF_DW, BPF_REG_0, 0, 1),
  58         BPF_EXIT_INSN(),
  59         },
  60         .fixup_map_hash_8b = { 3 },
  61         .errstr = "R0 invalid mem access",
  62         .errstr_unpriv = "R0 leaks addr",
  63         .result = REJECT,
  64         .flags = F_LOAD_WITH_STRICT_ALIGNMENT,
  65 },

/* [<][>][^][v][top][bottom][index][help] */