Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

bpf: Add loop test case with 32 bit reg comparison against 0

Add a loop test with 32 bit register against 0 immediate:

# ./test_verifier 631
#631/p taken loop with back jump to 1st insn, 2 OK

Disassembly:

[...]
1b: test %edi,%edi
1d: jne 0x0000000000000014
[...]

Pretty much similar to prior "taken loop with back jump to 1st
insn" test case just as jmp32 variant.

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Song Liu <songliubraving@fb.com>

authored by

Daniel Borkmann and committed by
Alexei Starovoitov
4bbbf164 38f51c07

+17
+17
tools/testing/selftests/bpf/verifier/loops1.c
··· 187 187 .prog_type = BPF_PROG_TYPE_XDP, 188 188 .retval = 55, 189 189 }, 190 + { 191 + "taken loop with back jump to 1st insn, 2", 192 + .insns = { 193 + BPF_MOV64_IMM(BPF_REG_1, 10), 194 + BPF_MOV64_IMM(BPF_REG_2, 0), 195 + BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1), 196 + BPF_EXIT_INSN(), 197 + BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_1), 198 + BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 1), 199 + BPF_JMP32_IMM(BPF_JNE, BPF_REG_1, 0, -3), 200 + BPF_MOV64_REG(BPF_REG_0, BPF_REG_2), 201 + BPF_EXIT_INSN(), 202 + }, 203 + .result = ACCEPT, 204 + .prog_type = BPF_PROG_TYPE_XDP, 205 + .retval = 55, 206 + },