]> git.baikalelectronics.ru Git - kernel.git/commitdiff
bpf: Use MAX_BPF_FUNC_REG_ARGS macro
authorDmitrii Banshchikov <me@ubique.spb.ru>
Thu, 25 Feb 2021 20:26:29 +0000 (00:26 +0400)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 26 Feb 2021 19:59:53 +0000 (11:59 -0800)
Instead of using integer literal here and there use macro name for
better context.

Signed-off-by: Dmitrii Banshchikov <me@ubique.spb.ru>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/20210225202629.585485-1-me@ubique.spb.ru
include/linux/bpf.h
kernel/bpf/btf.c
kernel/bpf/verifier.c

index e2cfc4809219c75d7e04808bb28a9f3d577eaf45..ae2c35641619b913f7f68a816a0311ef7cce1a12 100644 (file)
@@ -506,6 +506,11 @@ enum bpf_cgroup_storage_type {
  */
 #define MAX_BPF_FUNC_ARGS 12
 
+/* The maximum number of arguments passed through registers
+ * a single function may have.
+ */
+#define MAX_BPF_FUNC_REG_ARGS 5
+
 struct btf_func_model {
        u8 ret_size;
        u8 nr_args;
index 2efeb5f4b3433a35570544600e72e08f4855db3e..16e8148a28e29f04686c28f2ddf96c88cd2cdcdf 100644 (file)
@@ -4594,8 +4594,10 @@ bool btf_ctx_access(int off, int size, enum bpf_access_type type,
        }
        arg = off / 8;
        args = (const struct btf_param *)(t + 1);
-       /* if (t == NULL) Fall back to default BPF prog with 5 u64 arguments */
-       nr_args = t ? btf_type_vlen(t) : 5;
+       /* if (t == NULL) Fall back to default BPF prog with
+        * MAX_BPF_FUNC_REG_ARGS u64 arguments.
+        */
+       nr_args = t ? btf_type_vlen(t) : MAX_BPF_FUNC_REG_ARGS;
        if (prog->aux->attach_btf_trace) {
                /* skip first 'void *__data' argument in btf_trace_##name typedef */
                args++;
@@ -4651,7 +4653,7 @@ bool btf_ctx_access(int off, int size, enum bpf_access_type type,
                }
        } else {
                if (!t)
-                       /* Default prog with 5 args */
+                       /* Default prog with MAX_BPF_FUNC_REG_ARGS args */
                        return true;
                t = btf_type_by_id(btf, args[arg].type);
        }
@@ -5102,12 +5104,12 @@ int btf_distill_func_proto(struct bpf_verifier_log *log,
 
        if (!func) {
                /* BTF function prototype doesn't match the verifier types.
-                * Fall back to 5 u64 args.
+                * Fall back to MAX_BPF_FUNC_REG_ARGS u64 args.
                 */
-               for (i = 0; i < 5; i++)
+               for (i = 0; i < MAX_BPF_FUNC_REG_ARGS; i++)
                        m->arg_size[i] = 8;
                m->ret_size = 8;
-               m->nr_args = 5;
+               m->nr_args = MAX_BPF_FUNC_REG_ARGS;
                return 0;
        }
        args = (const struct btf_param *)(func + 1);
@@ -5330,8 +5332,9 @@ int btf_check_func_arg_match(struct bpf_verifier_env *env, int subprog,
        }
        args = (const struct btf_param *)(t + 1);
        nargs = btf_type_vlen(t);
-       if (nargs > 5) {
-               bpf_log(log, "Function %s has %d > 5 args\n", tname, nargs);
+       if (nargs > MAX_BPF_FUNC_REG_ARGS) {
+               bpf_log(log, "Function %s has %d > %d args\n", tname, nargs,
+                       MAX_BPF_FUNC_REG_ARGS);
                goto out;
        }
 
@@ -5460,9 +5463,9 @@ int btf_prepare_func_args(struct bpf_verifier_env *env, int subprog,
        }
        args = (const struct btf_param *)(t + 1);
        nargs = btf_type_vlen(t);
-       if (nargs > 5) {
-               bpf_log(log, "Global function %s() with %d > 5 args. Buggy compiler.\n",
-                       tname, nargs);
+       if (nargs > MAX_BPF_FUNC_REG_ARGS) {
+               bpf_log(log, "Global function %s() with %d > %d args. Buggy compiler.\n",
+                       tname, nargs, MAX_BPF_FUNC_REG_ARGS);
                return -EINVAL;
        }
        /* check that function returns int */
index 1dda9d81f12c5e8ef3bbc7327ebe51f305b6e67a..9f7e35590fc68156b1aa0928047a0686dfe277f5 100644 (file)
@@ -5544,7 +5544,7 @@ static int check_helper_call(struct bpf_verifier_env *env, int func_id, int insn
 
        meta.func_id = func_id;
        /* check args */
-       for (i = 0; i < 5; i++) {
+       for (i = 0; i < MAX_BPF_FUNC_REG_ARGS; i++) {
                err = check_func_arg(env, i, &meta, fn);
                if (err)
                        return err;