An upcoming commit will add another two pointer types that need very
similar behaviour, so generalise this function now.

Signed-off-by: Joe Stringer <j...@wand.net.nz>
Acked-by: Alexei Starovoitov <a...@kernel.org>
---
 kernel/bpf/verifier.c                       | 22 ++++++++++-----------
 tools/testing/selftests/bpf/test_verifier.c | 14 ++++++-------
 2 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 9c82d8f58085..abf567200574 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -2669,20 +2669,18 @@ static int adjust_ptr_min_max_vals(struct 
bpf_verifier_env *env,
                return -EACCES;
        }
 
-       if (ptr_reg->type == PTR_TO_MAP_VALUE_OR_NULL) {
-               verbose(env, "R%d pointer arithmetic on 
PTR_TO_MAP_VALUE_OR_NULL prohibited, null-check it first\n",
-                       dst);
-               return -EACCES;
-       }
-       if (ptr_reg->type == CONST_PTR_TO_MAP) {
-               verbose(env, "R%d pointer arithmetic on CONST_PTR_TO_MAP 
prohibited\n",
-                       dst);
+       switch (ptr_reg->type) {
+       case PTR_TO_MAP_VALUE_OR_NULL:
+               verbose(env, "R%d pointer arithmetic on %s prohibited, 
null-check it first\n",
+                       dst, reg_type_str[ptr_reg->type]);
                return -EACCES;
-       }
-       if (ptr_reg->type == PTR_TO_PACKET_END) {
-               verbose(env, "R%d pointer arithmetic on PTR_TO_PACKET_END 
prohibited\n",
-                       dst);
+       case CONST_PTR_TO_MAP:
+       case PTR_TO_PACKET_END:
+               verbose(env, "R%d pointer arithmetic on %s prohibited\n",
+                       dst, reg_type_str[ptr_reg->type]);
                return -EACCES;
+       default:
+               break;
        }
 
        /* In case of 'scalar += pointer', dst_reg inherits pointer type and id.
diff --git a/tools/testing/selftests/bpf/test_verifier.c 
b/tools/testing/selftests/bpf/test_verifier.c
index c7d25f23baf9..a90be44f61e0 100644
--- a/tools/testing/selftests/bpf/test_verifier.c
+++ b/tools/testing/selftests/bpf/test_verifier.c
@@ -3638,7 +3638,7 @@ static struct bpf_test tests[] = {
                        BPF_MOV64_IMM(BPF_REG_0, 0),
                        BPF_EXIT_INSN(),
                },
-               .errstr = "R3 pointer arithmetic on PTR_TO_PACKET_END",
+               .errstr = "R3 pointer arithmetic on pkt_end",
                .result = REJECT,
                .prog_type = BPF_PROG_TYPE_SCHED_CLS,
        },
@@ -4896,7 +4896,7 @@ static struct bpf_test tests[] = {
                        BPF_EXIT_INSN(),
                },
                .fixup_map1 = { 4 },
-               .errstr = "R4 pointer arithmetic on PTR_TO_MAP_VALUE_OR_NULL",
+               .errstr = "R4 pointer arithmetic on map_value_or_null",
                .result = REJECT,
                .prog_type = BPF_PROG_TYPE_SCHED_CLS
        },
@@ -4917,7 +4917,7 @@ static struct bpf_test tests[] = {
                        BPF_EXIT_INSN(),
                },
                .fixup_map1 = { 4 },
-               .errstr = "R4 pointer arithmetic on PTR_TO_MAP_VALUE_OR_NULL",
+               .errstr = "R4 pointer arithmetic on map_value_or_null",
                .result = REJECT,
                .prog_type = BPF_PROG_TYPE_SCHED_CLS
        },
@@ -4938,7 +4938,7 @@ static struct bpf_test tests[] = {
                        BPF_EXIT_INSN(),
                },
                .fixup_map1 = { 4 },
-               .errstr = "R4 pointer arithmetic on PTR_TO_MAP_VALUE_OR_NULL",
+               .errstr = "R4 pointer arithmetic on map_value_or_null",
                .result = REJECT,
                .prog_type = BPF_PROG_TYPE_SCHED_CLS
        },
@@ -7253,7 +7253,7 @@ static struct bpf_test tests[] = {
                        BPF_EXIT_INSN(),
                },
                .fixup_map_in_map = { 3 },
-               .errstr = "R1 pointer arithmetic on CONST_PTR_TO_MAP 
prohibited",
+               .errstr = "R1 pointer arithmetic on map_ptr prohibited",
                .result = REJECT,
        },
        {
@@ -8927,7 +8927,7 @@ static struct bpf_test tests[] = {
                        BPF_MOV64_IMM(BPF_REG_0, 0),
                        BPF_EXIT_INSN(),
                },
-               .errstr = "R3 pointer arithmetic on PTR_TO_PACKET_END",
+               .errstr = "R3 pointer arithmetic on pkt_end",
                .result = REJECT,
                .prog_type = BPF_PROG_TYPE_XDP,
        },
@@ -8946,7 +8946,7 @@ static struct bpf_test tests[] = {
                        BPF_MOV64_IMM(BPF_REG_0, 0),
                        BPF_EXIT_INSN(),
                },
-               .errstr = "R3 pointer arithmetic on PTR_TO_PACKET_END",
+               .errstr = "R3 pointer arithmetic on pkt_end",
                .result = REJECT,
                .prog_type = BPF_PROG_TYPE_XDP,
        },
-- 
2.17.1

Reply via email to