mirror of https://gitee.com/openkylin/linux.git
bpf: Use MAX_BPF_FUNC_REG_ARGS macro
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
This commit is contained in:
parent
a7d24d9582
commit
523a4cf491
|
@ -506,6 +506,11 @@ enum bpf_cgroup_storage_type {
|
||||||
*/
|
*/
|
||||||
#define MAX_BPF_FUNC_ARGS 12
|
#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 {
|
struct btf_func_model {
|
||||||
u8 ret_size;
|
u8 ret_size;
|
||||||
u8 nr_args;
|
u8 nr_args;
|
||||||
|
|
|
@ -4594,8 +4594,10 @@ bool btf_ctx_access(int off, int size, enum bpf_access_type type,
|
||||||
}
|
}
|
||||||
arg = off / 8;
|
arg = off / 8;
|
||||||
args = (const struct btf_param *)(t + 1);
|
args = (const struct btf_param *)(t + 1);
|
||||||
/* if (t == NULL) Fall back to default BPF prog with 5 u64 arguments */
|
/* if (t == NULL) Fall back to default BPF prog with
|
||||||
nr_args = t ? btf_type_vlen(t) : 5;
|
* 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) {
|
if (prog->aux->attach_btf_trace) {
|
||||||
/* skip first 'void *__data' argument in btf_trace_##name typedef */
|
/* skip first 'void *__data' argument in btf_trace_##name typedef */
|
||||||
args++;
|
args++;
|
||||||
|
@ -4651,7 +4653,7 @@ bool btf_ctx_access(int off, int size, enum bpf_access_type type,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!t)
|
if (!t)
|
||||||
/* Default prog with 5 args */
|
/* Default prog with MAX_BPF_FUNC_REG_ARGS args */
|
||||||
return true;
|
return true;
|
||||||
t = btf_type_by_id(btf, args[arg].type);
|
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) {
|
if (!func) {
|
||||||
/* BTF function prototype doesn't match the verifier types.
|
/* 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->arg_size[i] = 8;
|
||||||
m->ret_size = 8;
|
m->ret_size = 8;
|
||||||
m->nr_args = 5;
|
m->nr_args = MAX_BPF_FUNC_REG_ARGS;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
args = (const struct btf_param *)(func + 1);
|
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);
|
args = (const struct btf_param *)(t + 1);
|
||||||
nargs = btf_type_vlen(t);
|
nargs = btf_type_vlen(t);
|
||||||
if (nargs > 5) {
|
if (nargs > MAX_BPF_FUNC_REG_ARGS) {
|
||||||
bpf_log(log, "Function %s has %d > 5 args\n", tname, nargs);
|
bpf_log(log, "Function %s has %d > %d args\n", tname, nargs,
|
||||||
|
MAX_BPF_FUNC_REG_ARGS);
|
||||||
goto out;
|
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);
|
args = (const struct btf_param *)(t + 1);
|
||||||
nargs = btf_type_vlen(t);
|
nargs = btf_type_vlen(t);
|
||||||
if (nargs > 5) {
|
if (nargs > MAX_BPF_FUNC_REG_ARGS) {
|
||||||
bpf_log(log, "Global function %s() with %d > 5 args. Buggy compiler.\n",
|
bpf_log(log, "Global function %s() with %d > %d args. Buggy compiler.\n",
|
||||||
tname, nargs);
|
tname, nargs, MAX_BPF_FUNC_REG_ARGS);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
/* check that function returns int */
|
/* check that function returns int */
|
||||||
|
|
|
@ -5544,7 +5544,7 @@ static int check_helper_call(struct bpf_verifier_env *env, int func_id, int insn
|
||||||
|
|
||||||
meta.func_id = func_id;
|
meta.func_id = func_id;
|
||||||
/* check args */
|
/* 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);
|
err = check_func_arg(env, i, &meta, fn);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
Loading…
Reference in New Issue