tools/bpf: Add verifier tests for 32bit pointer/scalar arithmetic
authorYonghong Song <yhs@fb.com>
Thu, 18 Jun 2020 23:46:32 +0000 (16:46 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 19 Jun 2020 21:34:43 +0000 (23:34 +0200)
Added two test_verifier subtests for 32bit pointer/scalar arithmetic
with BPF_SUB operator. They are passing verifier now.

Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20200618234632.3321367-1-yhs@fb.com
tools/testing/selftests/bpf/verifier/value_ptr_arith.c

index 97ee658..ed4e76b 100644 (file)
        .errstr = "R0 invalid mem access 'inv'",
        .errstr_unpriv = "R0 pointer -= pointer prohibited",
 },
+{
+       "32bit pkt_ptr -= scalar",
+       .insns = {
+       BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1,
+                   offsetof(struct __sk_buff, data_end)),
+       BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
+                   offsetof(struct __sk_buff, data)),
+       BPF_MOV64_REG(BPF_REG_6, BPF_REG_7),
+       BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 40),
+       BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_8, 2),
+       BPF_ALU32_REG(BPF_MOV, BPF_REG_4, BPF_REG_7),
+       BPF_ALU32_REG(BPF_SUB, BPF_REG_6, BPF_REG_4),
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_SCHED_CLS,
+       .result = ACCEPT,
+       .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
+},
+{
+       "32bit scalar -= pkt_ptr",
+       .insns = {
+       BPF_LDX_MEM(BPF_W, BPF_REG_8, BPF_REG_1,
+                   offsetof(struct __sk_buff, data_end)),
+       BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_1,
+                   offsetof(struct __sk_buff, data)),
+       BPF_MOV64_REG(BPF_REG_6, BPF_REG_7),
+       BPF_ALU64_IMM(BPF_ADD, BPF_REG_6, 40),
+       BPF_JMP_REG(BPF_JGT, BPF_REG_6, BPF_REG_8, 2),
+       BPF_ALU32_REG(BPF_MOV, BPF_REG_4, BPF_REG_6),
+       BPF_ALU32_REG(BPF_SUB, BPF_REG_4, BPF_REG_7),
+       BPF_MOV64_IMM(BPF_REG_0, 0),
+       BPF_EXIT_INSN(),
+       },
+       .prog_type = BPF_PROG_TYPE_SCHED_CLS,
+       .result = ACCEPT,
+       .flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
+},