OSDN Git Service

bpf: Update selftests to reflect new error states
authorDaniel Borkmann <daniel@iogearbox.net>
Fri, 28 May 2021 10:38:06 +0000 (13:38 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Jun 2021 06:38:07 +0000 (08:38 +0200)
commit d7a5091351756d0ae8e63134313c455624e36a13 upstream

Update various selftest error messages:

 * The 'Rx tried to sub from different maps, paths, or prohibited types'
   is reworked into more specific/differentiated error messages for better
   guidance.

 * The change into 'value -4294967168 makes map_value pointer be out of
   bounds' is due to moving the mixed bounds check into the speculation
   handling and thus occuring slightly later than above mentioned sanity
   check.

 * The change into 'math between map_value pointer and register with
   unbounded min value' is similarly due to register sanity check coming
   before the mixed bounds check.

 * The case of 'map access: known scalar += value_ptr from different maps'
   now loads fine given masks are the same from the different paths (despite
   max map value size being different).

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Reviewed-by: John Fastabend <john.fastabend@gmail.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
[OP: 4.19 backport, account for split test_verifier and
different / missing tests]
Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
tools/testing/selftests/bpf/test_verifier.c

index 662d6ac..e1e4b6a 100644 (file)
@@ -2873,7 +2873,7 @@ static struct bpf_test tests[] = {
                        BPF_STX_MEM(BPF_DW, BPF_REG_1, BPF_REG_0, -8),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R1 tried to add from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 stack pointer arithmetic goes out of range",
                .result_unpriv = REJECT,
                .result = ACCEPT,
        },
@@ -7501,7 +7501,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7526,7 +7525,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7553,7 +7551,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R8 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7579,7 +7576,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R8 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7628,7 +7624,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7700,7 +7695,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7752,7 +7746,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7780,7 +7773,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7807,7 +7799,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7837,7 +7828,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R7 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7868,7 +7858,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 4 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
        },
        {
@@ -7897,7 +7886,6 @@ static struct bpf_test tests[] = {
                },
                .fixup_map1 = { 3 },
                .errstr = "unbounded min value",
-               .errstr_unpriv = "R1 has unknown scalar with mixed signed bounds",
                .result = REJECT,
                .result_unpriv = REJECT,
        },
@@ -9799,7 +9787,7 @@ static struct bpf_test tests[] = {
                        BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 has pointer with unsupported alu operation",
                .errstr = "R0 tried to subtract pointer from scalar",
                .result = REJECT,
        },
@@ -9814,7 +9802,7 @@ static struct bpf_test tests[] = {
                        BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 has pointer with unsupported alu operation",
                .result_unpriv = REJECT,
                .result = ACCEPT,
                .retval = 1,
@@ -9827,22 +9815,23 @@ static struct bpf_test tests[] = {
                        BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 has pointer with unsupported alu operation",
                .errstr = "R0 tried to subtract pointer from scalar",
                .result = REJECT,
        },
        {
                "check deducing bounds from const, 4",
                .insns = {
+                       BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
                        BPF_MOV64_IMM(BPF_REG_0, 0),
                        BPF_JMP_IMM(BPF_JSLE, BPF_REG_0, 0, 1),
                        BPF_EXIT_INSN(),
                        BPF_JMP_IMM(BPF_JSGE, BPF_REG_0, 0, 1),
                        BPF_EXIT_INSN(),
-                       BPF_ALU64_REG(BPF_SUB, BPF_REG_1, BPF_REG_0),
+                       BPF_ALU64_REG(BPF_SUB, BPF_REG_6, BPF_REG_0),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R6 has pointer with unsupported alu operation",
                .result_unpriv = REJECT,
                .result = ACCEPT,
        },
@@ -9854,7 +9843,7 @@ static struct bpf_test tests[] = {
                        BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 has pointer with unsupported alu operation",
                .errstr = "R0 tried to subtract pointer from scalar",
                .result = REJECT,
        },
@@ -9867,7 +9856,7 @@ static struct bpf_test tests[] = {
                        BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 has pointer with unsupported alu operation",
                .errstr = "R0 tried to subtract pointer from scalar",
                .result = REJECT,
        },
@@ -9881,7 +9870,7 @@ static struct bpf_test tests[] = {
                                    offsetof(struct __sk_buff, mark)),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R1 tried to sub from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 has pointer with unsupported alu operation",
                .errstr = "dereference of modified ctx ptr",
                .result = REJECT,
        },
@@ -9895,7 +9884,7 @@ static struct bpf_test tests[] = {
                                    offsetof(struct __sk_buff, mark)),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R1 tried to add from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 has pointer with unsupported alu operation",
                .errstr = "dereference of modified ctx ptr",
                .result = REJECT,
        },
@@ -9907,7 +9896,7 @@ static struct bpf_test tests[] = {
                        BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1),
                        BPF_EXIT_INSN(),
                },
-               .errstr_unpriv = "R0 tried to sub from different maps, paths, or prohibited types",
+               .errstr_unpriv = "R1 has pointer with unsupported alu operation",
                .errstr = "R0 tried to subtract pointer from scalar",
                .result = REJECT,
        },