bpf: allow bpf_fastcall for bpf_cast_to_kern_ctx and bpf_rdonly_cast
authorEduard Zingerman <eddyz87@gmail.com>
Thu, 22 Aug 2024 08:41:10 +0000 (01:41 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 22 Aug 2024 15:35:21 +0000 (08:35 -0700)
do_misc_fixups() relaces bpf_cast_to_kern_ctx() and bpf_rdonly_cast()
by a single instruction "r0 = r1". This follows bpf_fastcall contract.
This commit allows bpf_fastcall pattern rewrite for these two
functions in order to use them in bpf_fastcall selftests.

Acked-by: Yonghong Song <yonghong.song@linux.dev>
Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20240822084112.3257995-5-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/verifier.c

index 94308cc7c503058c7d3f2bfd5e9a3ff5a0fc545d..543b8c9edac78737e149963ad6f12e7ba5f8a2a9 100644 (file)
@@ -16170,6 +16170,9 @@ static u32 kfunc_fastcall_clobber_mask(struct bpf_kfunc_call_arg_meta *meta)
 /* Same as verifier_inlines_helper_call() but for kfuncs, see comment above */
 static bool is_fastcall_kfunc_call(struct bpf_kfunc_call_arg_meta *meta)
 {
+       if (meta->btf == btf_vmlinux)
+               return meta->func_id == special_kfunc_list[KF_bpf_cast_to_kern_ctx] ||
+                      meta->func_id == special_kfunc_list[KF_bpf_rdonly_cast];
        return false;
 }