bpf: Add loop test case with 32 bit reg comparison against 0
authorDaniel Borkmann <daniel@iogearbox.net>
Wed, 2 Oct 2019 23:45:12 +0000 (01:45 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 4 Oct 2019 19:27:36 +0000 (12:27 -0700)
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>
tools/testing/selftests/bpf/verifier/loops1.c

index 1fc4e61..1af3718 100644 (file)
        .prog_type = BPF_PROG_TYPE_XDP,
        .retval = 55,
 },
+{
+       "taken loop with back jump to 1st insn, 2",
+       .insns = {
+       BPF_MOV64_IMM(BPF_REG_1, 10),
+       BPF_MOV64_IMM(BPF_REG_2, 0),
+       BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 1, 0, 1),
+       BPF_EXIT_INSN(),
+       BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_1),
+       BPF_ALU64_IMM(BPF_SUB, BPF_REG_1, 1),
+       BPF_JMP32_IMM(BPF_JNE, BPF_REG_1, 0, -3),
+       BPF_MOV64_REG(BPF_REG_0, BPF_REG_2),
+       BPF_EXIT_INSN(),
+       },
+       .result = ACCEPT,
+       .prog_type = BPF_PROG_TYPE_XDP,
+       .retval = 55,
+},