Skip to content

Commit aeee380

Browse files
Alexei Starovoitovborkmann
authored andcommitted
selftests/bpf: fix tests
Fix tests that assumed no loops. Signed-off-by: Alexei Starovoitov <[email protected]> Acked-by: Andrii Nakryiko <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]>
1 parent eea1c22 commit aeee380

File tree

3 files changed

+24
-20
lines changed

3 files changed

+24
-20
lines changed

tools/testing/selftests/bpf/test_verifier.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -237,10 +237,10 @@ static void bpf_fill_scale1(struct bpf_test *self)
237237
insn[i++] = BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_6,
238238
-8 * (k % 64 + 1));
239239
}
240-
/* every jump adds 1 step to insn_processed, so to stay exactly
241-
* within 1m limit add MAX_TEST_INSNS - MAX_JMP_SEQ - 1 MOVs and 1 EXIT
240+
/* is_state_visited() doesn't allocate state for pruning for every jump.
241+
* Hence multiply jmps by 4 to accommodate that heuristic
242242
*/
243-
while (i < MAX_TEST_INSNS - MAX_JMP_SEQ - 1)
243+
while (i < MAX_TEST_INSNS - MAX_JMP_SEQ * 4)
244244
insn[i++] = BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 42);
245245
insn[i] = BPF_EXIT_INSN();
246246
self->prog_len = i + 1;
@@ -269,10 +269,7 @@ static void bpf_fill_scale2(struct bpf_test *self)
269269
insn[i++] = BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_6,
270270
-8 * (k % (64 - 4 * FUNC_NEST) + 1));
271271
}
272-
/* every jump adds 1 step to insn_processed, so to stay exactly
273-
* within 1m limit add MAX_TEST_INSNS - MAX_JMP_SEQ - 1 MOVs and 1 EXIT
274-
*/
275-
while (i < MAX_TEST_INSNS - MAX_JMP_SEQ - 1)
272+
while (i < MAX_TEST_INSNS - MAX_JMP_SEQ * 4)
276273
insn[i++] = BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 42);
277274
insn[i] = BPF_EXIT_INSN();
278275
self->prog_len = i + 1;

tools/testing/selftests/bpf/verifier/calls.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,9 +215,11 @@
215215
BPF_MOV64_IMM(BPF_REG_0, 3),
216216
BPF_JMP_IMM(BPF_JA, 0, 0, -6),
217217
},
218-
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
219-
.errstr = "back-edge from insn",
220-
.result = REJECT,
218+
.prog_type = BPF_PROG_TYPE_SOCKET_FILTER,
219+
.errstr_unpriv = "back-edge from insn",
220+
.result_unpriv = REJECT,
221+
.result = ACCEPT,
222+
.retval = 1,
221223
},
222224
{
223225
"calls: conditional call 4",
@@ -250,22 +252,24 @@
250252
BPF_MOV64_IMM(BPF_REG_0, 3),
251253
BPF_EXIT_INSN(),
252254
},
253-
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
254-
.errstr = "back-edge from insn",
255-
.result = REJECT,
255+
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
256+
.result = ACCEPT,
257+
.retval = 1,
256258
},
257259
{
258260
"calls: conditional call 6",
259261
.insns = {
262+
BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
263+
BPF_MOV64_REG(BPF_REG_1, BPF_REG_6),
260264
BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 2),
261-
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, -2),
265+
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, -3),
262266
BPF_EXIT_INSN(),
263267
BPF_LDX_MEM(BPF_W, BPF_REG_0, BPF_REG_1,
264268
offsetof(struct __sk_buff, mark)),
265269
BPF_EXIT_INSN(),
266270
},
267-
.prog_type = BPF_PROG_TYPE_TRACEPOINT,
268-
.errstr = "back-edge from insn",
271+
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
272+
.errstr = "infinite loop detected",
269273
.result = REJECT,
270274
},
271275
{

tools/testing/selftests/bpf/verifier/cfg.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
BPF_JMP_IMM(BPF_JA, 0, 0, -1),
4242
BPF_EXIT_INSN(),
4343
},
44-
.errstr = "back-edge",
44+
.errstr = "unreachable insn 1",
45+
.errstr_unpriv = "back-edge",
4546
.result = REJECT,
4647
},
4748
{
@@ -53,18 +54,20 @@
5354
BPF_JMP_IMM(BPF_JA, 0, 0, -4),
5455
BPF_EXIT_INSN(),
5556
},
56-
.errstr = "back-edge",
57+
.errstr = "unreachable insn 4",
58+
.errstr_unpriv = "back-edge",
5759
.result = REJECT,
5860
},
5961
{
6062
"conditional loop",
6163
.insns = {
62-
BPF_MOV64_REG(BPF_REG_1, BPF_REG_0),
64+
BPF_MOV64_REG(BPF_REG_0, BPF_REG_1),
6365
BPF_MOV64_REG(BPF_REG_2, BPF_REG_0),
6466
BPF_MOV64_REG(BPF_REG_3, BPF_REG_0),
6567
BPF_JMP_IMM(BPF_JEQ, BPF_REG_1, 0, -3),
6668
BPF_EXIT_INSN(),
6769
},
68-
.errstr = "back-edge",
70+
.errstr = "infinite loop detected",
71+
.errstr_unpriv = "back-edge",
6972
.result = REJECT,
7073
},

0 commit comments

Comments
 (0)