1e8c13c4dSAlexei Starovoitov { 2e8c13c4dSAlexei Starovoitov "precise: test 1", 3e8c13c4dSAlexei Starovoitov .insns = { 4e8c13c4dSAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_0, 1), 5e8c13c4dSAlexei Starovoitov BPF_LD_MAP_FD(BPF_REG_6, 0), 6e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 7e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_2, BPF_REG_FP), 8e8c13c4dSAlexei Starovoitov BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 9e8c13c4dSAlexei Starovoitov BPF_ST_MEM(BPF_DW, BPF_REG_FP, -8, 0), 10e8c13c4dSAlexei Starovoitov BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 11e8c13c4dSAlexei Starovoitov BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 12e8c13c4dSAlexei Starovoitov BPF_EXIT_INSN(), 13e8c13c4dSAlexei Starovoitov 14e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_9, BPF_REG_0), 15e8c13c4dSAlexei Starovoitov 16e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 17e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_2, BPF_REG_FP), 18e8c13c4dSAlexei Starovoitov BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 19e8c13c4dSAlexei Starovoitov BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 20e8c13c4dSAlexei Starovoitov BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 21e8c13c4dSAlexei Starovoitov BPF_EXIT_INSN(), 22e8c13c4dSAlexei Starovoitov 23e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_8, BPF_REG_0), 24e8c13c4dSAlexei Starovoitov 25e8c13c4dSAlexei Starovoitov BPF_ALU64_REG(BPF_SUB, BPF_REG_9, BPF_REG_8), /* map_value_ptr -= map_value_ptr */ 26e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_2, BPF_REG_9), 27e8c13c4dSAlexei Starovoitov BPF_JMP_IMM(BPF_JLT, BPF_REG_2, 8, 1), 28e8c13c4dSAlexei Starovoitov BPF_EXIT_INSN(), 29e8c13c4dSAlexei Starovoitov 30e8c13c4dSAlexei Starovoitov BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1), /* R2=inv(umin=1, umax=8) */ 31e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_1, BPF_REG_FP), 32e8c13c4dSAlexei Starovoitov BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8), 33e8c13c4dSAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_3, 0), 34*9bc499beSIlya Leoshkevich BPF_EMIT_CALL(BPF_FUNC_probe_read_kernel), 35e8c13c4dSAlexei Starovoitov BPF_EXIT_INSN(), 36e8c13c4dSAlexei Starovoitov }, 37e8c13c4dSAlexei Starovoitov .prog_type = BPF_PROG_TYPE_TRACEPOINT, 38e8c13c4dSAlexei Starovoitov .fixup_map_array_48b = { 1 }, 39e8c13c4dSAlexei Starovoitov .result = VERBOSE_ACCEPT, 40e8c13c4dSAlexei Starovoitov .errstr = 41*9bc499beSIlya Leoshkevich "26: (85) call bpf_probe_read_kernel#113\ 42e8c13c4dSAlexei Starovoitov last_idx 26 first_idx 20\ 43e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 25\ 44e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 24\ 45e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 23\ 46e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 22\ 47e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 20\ 48e8c13c4dSAlexei Starovoitov parent didn't have regs=4 stack=0 marks\ 49e8c13c4dSAlexei Starovoitov last_idx 19 first_idx 10\ 50e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 19\ 51e8c13c4dSAlexei Starovoitov regs=200 stack=0 before 18\ 52e8c13c4dSAlexei Starovoitov regs=300 stack=0 before 17\ 53e8c13c4dSAlexei Starovoitov regs=201 stack=0 before 15\ 54e8c13c4dSAlexei Starovoitov regs=201 stack=0 before 14\ 55e8c13c4dSAlexei Starovoitov regs=200 stack=0 before 13\ 56e8c13c4dSAlexei Starovoitov regs=200 stack=0 before 12\ 57e8c13c4dSAlexei Starovoitov regs=200 stack=0 before 11\ 58e8c13c4dSAlexei Starovoitov regs=200 stack=0 before 10\ 59e8c13c4dSAlexei Starovoitov parent already had regs=0 stack=0 marks", 60e8c13c4dSAlexei Starovoitov }, 61e8c13c4dSAlexei Starovoitov { 62e8c13c4dSAlexei Starovoitov "precise: test 2", 63e8c13c4dSAlexei Starovoitov .insns = { 64e8c13c4dSAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_0, 1), 65e8c13c4dSAlexei Starovoitov BPF_LD_MAP_FD(BPF_REG_6, 0), 66e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 67e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_2, BPF_REG_FP), 68e8c13c4dSAlexei Starovoitov BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 69e8c13c4dSAlexei Starovoitov BPF_ST_MEM(BPF_DW, BPF_REG_FP, -8, 0), 70e8c13c4dSAlexei Starovoitov BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 71e8c13c4dSAlexei Starovoitov BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 72e8c13c4dSAlexei Starovoitov BPF_EXIT_INSN(), 73e8c13c4dSAlexei Starovoitov 74e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_9, BPF_REG_0), 75e8c13c4dSAlexei Starovoitov 76e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_1, BPF_REG_6), 77e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_2, BPF_REG_FP), 78e8c13c4dSAlexei Starovoitov BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), 79e8c13c4dSAlexei Starovoitov BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem), 80e8c13c4dSAlexei Starovoitov BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 81e8c13c4dSAlexei Starovoitov BPF_EXIT_INSN(), 82e8c13c4dSAlexei Starovoitov 83e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_8, BPF_REG_0), 84e8c13c4dSAlexei Starovoitov 85e8c13c4dSAlexei Starovoitov BPF_ALU64_REG(BPF_SUB, BPF_REG_9, BPF_REG_8), /* map_value_ptr -= map_value_ptr */ 86e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_2, BPF_REG_9), 87e8c13c4dSAlexei Starovoitov BPF_JMP_IMM(BPF_JLT, BPF_REG_2, 8, 1), 88e8c13c4dSAlexei Starovoitov BPF_EXIT_INSN(), 89e8c13c4dSAlexei Starovoitov 90e8c13c4dSAlexei Starovoitov BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, 1), /* R2=inv(umin=1, umax=8) */ 91e8c13c4dSAlexei Starovoitov BPF_MOV64_REG(BPF_REG_1, BPF_REG_FP), 92e8c13c4dSAlexei Starovoitov BPF_ALU64_IMM(BPF_ADD, BPF_REG_1, -8), 93e8c13c4dSAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_3, 0), 94*9bc499beSIlya Leoshkevich BPF_EMIT_CALL(BPF_FUNC_probe_read_kernel), 95e8c13c4dSAlexei Starovoitov BPF_EXIT_INSN(), 96e8c13c4dSAlexei Starovoitov }, 97e8c13c4dSAlexei Starovoitov .prog_type = BPF_PROG_TYPE_TRACEPOINT, 98e8c13c4dSAlexei Starovoitov .fixup_map_array_48b = { 1 }, 99e8c13c4dSAlexei Starovoitov .result = VERBOSE_ACCEPT, 100e8c13c4dSAlexei Starovoitov .flags = BPF_F_TEST_STATE_FREQ, 101e8c13c4dSAlexei Starovoitov .errstr = 102*9bc499beSIlya Leoshkevich "26: (85) call bpf_probe_read_kernel#113\ 103e8c13c4dSAlexei Starovoitov last_idx 26 first_idx 22\ 104e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 25\ 105e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 24\ 106e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 23\ 107e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 22\ 108e8c13c4dSAlexei Starovoitov parent didn't have regs=4 stack=0 marks\ 109e8c13c4dSAlexei Starovoitov last_idx 20 first_idx 20\ 110e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 20\ 111e8c13c4dSAlexei Starovoitov parent didn't have regs=4 stack=0 marks\ 112e8c13c4dSAlexei Starovoitov last_idx 19 first_idx 17\ 113e8c13c4dSAlexei Starovoitov regs=4 stack=0 before 19\ 114e8c13c4dSAlexei Starovoitov regs=200 stack=0 before 18\ 115e8c13c4dSAlexei Starovoitov regs=300 stack=0 before 17\ 116e8c13c4dSAlexei Starovoitov parent already had regs=0 stack=0 marks", 117e8c13c4dSAlexei Starovoitov }, 118411cdb45SAlexei Starovoitov { 119411cdb45SAlexei Starovoitov "precise: cross frame pruning", 120411cdb45SAlexei Starovoitov .insns = { 121411cdb45SAlexei Starovoitov BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 122411cdb45SAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_8, 0), 123411cdb45SAlexei Starovoitov BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 124411cdb45SAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_8, 1), 125411cdb45SAlexei Starovoitov BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 126411cdb45SAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_9, 0), 127411cdb45SAlexei Starovoitov BPF_JMP_IMM(BPF_JNE, BPF_REG_0, 0, 1), 128411cdb45SAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_9, 1), 129411cdb45SAlexei Starovoitov BPF_MOV64_REG(BPF_REG_1, BPF_REG_0), 130411cdb45SAlexei Starovoitov BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 4), 131411cdb45SAlexei Starovoitov BPF_JMP_IMM(BPF_JEQ, BPF_REG_8, 1, 1), 132411cdb45SAlexei Starovoitov BPF_LDX_MEM(BPF_B, BPF_REG_1, BPF_REG_2, 0), 133411cdb45SAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_0, 0), 134411cdb45SAlexei Starovoitov BPF_EXIT_INSN(), 135411cdb45SAlexei Starovoitov BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, 0), 136411cdb45SAlexei Starovoitov BPF_EXIT_INSN(), 137411cdb45SAlexei Starovoitov }, 138411cdb45SAlexei Starovoitov .prog_type = BPF_PROG_TYPE_XDP, 139411cdb45SAlexei Starovoitov .flags = BPF_F_TEST_STATE_FREQ, 140411cdb45SAlexei Starovoitov .errstr = "!read_ok", 141411cdb45SAlexei Starovoitov .result = REJECT, 142411cdb45SAlexei Starovoitov }, 143310f4204SAlexei Starovoitov { 144310f4204SAlexei Starovoitov "precise: ST insn causing spi > allocated_stack", 145310f4204SAlexei Starovoitov .insns = { 146310f4204SAlexei Starovoitov BPF_MOV64_REG(BPF_REG_3, BPF_REG_10), 147310f4204SAlexei Starovoitov BPF_JMP_IMM(BPF_JNE, BPF_REG_3, 123, 0), 148310f4204SAlexei Starovoitov BPF_ST_MEM(BPF_DW, BPF_REG_3, -8, 0), 149310f4204SAlexei Starovoitov BPF_LDX_MEM(BPF_DW, BPF_REG_4, BPF_REG_10, -8), 150310f4204SAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_0, -1), 151310f4204SAlexei Starovoitov BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_0, 0), 152310f4204SAlexei Starovoitov BPF_EXIT_INSN(), 153310f4204SAlexei Starovoitov }, 154310f4204SAlexei Starovoitov .prog_type = BPF_PROG_TYPE_XDP, 155310f4204SAlexei Starovoitov .flags = BPF_F_TEST_STATE_FREQ, 156310f4204SAlexei Starovoitov .errstr = "5: (2d) if r4 > r0 goto pc+0\ 157310f4204SAlexei Starovoitov last_idx 5 first_idx 5\ 158310f4204SAlexei Starovoitov parent didn't have regs=10 stack=0 marks\ 159310f4204SAlexei Starovoitov last_idx 4 first_idx 2\ 160310f4204SAlexei Starovoitov regs=10 stack=0 before 4\ 161310f4204SAlexei Starovoitov regs=10 stack=0 before 3\ 162310f4204SAlexei Starovoitov regs=0 stack=1 before 2\ 163310f4204SAlexei Starovoitov last_idx 5 first_idx 5\ 164310f4204SAlexei Starovoitov parent didn't have regs=1 stack=0 marks", 165310f4204SAlexei Starovoitov .result = VERBOSE_ACCEPT, 166310f4204SAlexei Starovoitov .retval = -1, 167310f4204SAlexei Starovoitov }, 168310f4204SAlexei Starovoitov { 169310f4204SAlexei Starovoitov "precise: STX insn causing spi > allocated_stack", 170310f4204SAlexei Starovoitov .insns = { 171310f4204SAlexei Starovoitov BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_get_prandom_u32), 172310f4204SAlexei Starovoitov BPF_MOV64_REG(BPF_REG_3, BPF_REG_10), 173310f4204SAlexei Starovoitov BPF_JMP_IMM(BPF_JNE, BPF_REG_3, 123, 0), 174310f4204SAlexei Starovoitov BPF_STX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, -8), 175310f4204SAlexei Starovoitov BPF_LDX_MEM(BPF_DW, BPF_REG_4, BPF_REG_10, -8), 176310f4204SAlexei Starovoitov BPF_MOV64_IMM(BPF_REG_0, -1), 177310f4204SAlexei Starovoitov BPF_JMP_REG(BPF_JGT, BPF_REG_4, BPF_REG_0, 0), 178310f4204SAlexei Starovoitov BPF_EXIT_INSN(), 179310f4204SAlexei Starovoitov }, 180310f4204SAlexei Starovoitov .prog_type = BPF_PROG_TYPE_XDP, 181310f4204SAlexei Starovoitov .flags = BPF_F_TEST_STATE_FREQ, 182310f4204SAlexei Starovoitov .errstr = "last_idx 6 first_idx 6\ 183310f4204SAlexei Starovoitov parent didn't have regs=10 stack=0 marks\ 184310f4204SAlexei Starovoitov last_idx 5 first_idx 3\ 185310f4204SAlexei Starovoitov regs=10 stack=0 before 5\ 186310f4204SAlexei Starovoitov regs=10 stack=0 before 4\ 187310f4204SAlexei Starovoitov regs=0 stack=1 before 3\ 188310f4204SAlexei Starovoitov last_idx 6 first_idx 6\ 189310f4204SAlexei Starovoitov parent didn't have regs=1 stack=0 marks\ 190310f4204SAlexei Starovoitov last_idx 5 first_idx 3\ 191310f4204SAlexei Starovoitov regs=1 stack=0 before 5", 192310f4204SAlexei Starovoitov .result = VERBOSE_ACCEPT, 193310f4204SAlexei Starovoitov .retval = -1, 194310f4204SAlexei Starovoitov }, 195