mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-23 12:14:10 +08:00
bpf: Fix error message on kfunc arg type mismatch
When "arg#%d expected pointer to ctx, but got %s" error is printed, both
template parts actually point to the type of the argument, therefore, it
will also say "but got PTR", regardless of what was the actual register
type.
Fix the message to print the register type in the second part of the
template, change the existing test to adapt to the new format, and add a
new test to test the case when arg is a pointer to context, but reg is a
scalar.
Fixes: 00b85860fe
("bpf: Rewrite kfunc argument handling")
Signed-off-by: Maxim Mikityanskiy <maxim@isovalent.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Acked-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Link: https://lore.kernel.org/bpf/20240909133909.1315460-1-maxim@isovalent.com
This commit is contained in:
parent
f028d7716c
commit
bee109b7b3
@ -12132,7 +12132,8 @@ static int check_kfunc_args(struct bpf_verifier_env *env, struct bpf_kfunc_call_
|
||||
switch (kf_arg_type) {
|
||||
case KF_ARG_PTR_TO_CTX:
|
||||
if (reg->type != PTR_TO_CTX) {
|
||||
verbose(env, "arg#%d expected pointer to ctx, but got %s\n", i, btf_type_str(t));
|
||||
verbose(env, "arg#%d expected pointer to ctx, but got %s\n",
|
||||
i, reg_type_str(env, reg->type));
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -68,6 +68,7 @@ static struct kfunc_test_params kfunc_tests[] = {
|
||||
TC_FAIL(kfunc_call_test_get_mem_fail_oob, 0, "min value is outside of the allowed memory range"),
|
||||
TC_FAIL(kfunc_call_test_get_mem_fail_not_const, 0, "is not a const"),
|
||||
TC_FAIL(kfunc_call_test_mem_acquire_fail, 0, "acquire kernel function does not return PTR_TO_BTF_ID"),
|
||||
TC_FAIL(kfunc_call_test_pointer_arg_type_mismatch, 0, "arg#0 expected pointer to ctx, but got scalar"),
|
||||
|
||||
/* success cases */
|
||||
TC_TEST(kfunc_call_test1, 12),
|
||||
|
@ -150,4 +150,11 @@ int kfunc_call_test_mem_acquire_fail(struct __sk_buff *skb)
|
||||
return ret;
|
||||
}
|
||||
|
||||
SEC("?tc")
|
||||
int kfunc_call_test_pointer_arg_type_mismatch(struct __sk_buff *skb)
|
||||
{
|
||||
bpf_kfunc_call_test_pass_ctx((void *)10);
|
||||
return 0;
|
||||
}
|
||||
|
||||
char _license[] SEC("license") = "GPL";
|
||||
|
@ -76,7 +76,7 @@
|
||||
},
|
||||
.prog_type = BPF_PROG_TYPE_SCHED_CLS,
|
||||
.result = REJECT,
|
||||
.errstr = "arg#0 expected pointer to ctx, but got PTR",
|
||||
.errstr = "arg#0 expected pointer to ctx, but got fp",
|
||||
.fixup_kfunc_btf_id = {
|
||||
{ "bpf_kfunc_call_test_pass_ctx", 2 },
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user