bpf: arm64: No support of struct argument in trampoline programs
authorYonghong Song <yhs@fb.com>
Wed, 31 Aug 2022 15:27:02 +0000 (08:27 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 7 Sep 2022 02:51:14 +0000 (19:51 -0700)
ARM64 does not support struct argument for trampoline based
bpf programs yet.

Signed-off-by: Yonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/r/20220831152702.2079066-1-yhs@fb.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
arch/arm64/net/bpf_jit_comp.c

index 389623a..30f7617 100644 (file)
@@ -1970,7 +1970,7 @@ int arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image,
                                u32 flags, struct bpf_tramp_links *tlinks,
                                void *orig_call)
 {
-       int ret;
+       int i, ret;
        int nargs = m->nr_args;
        int max_insns = ((long)image_end - (long)image) / AARCH64_INSN_SIZE;
        struct jit_ctx ctx = {
@@ -1982,6 +1982,12 @@ int arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image,
        if (nargs > 8)
                return -ENOTSUPP;
 
+       /* don't support struct argument */
+       for (i = 0; i < MAX_BPF_FUNC_ARGS; i++) {
+               if (m->arg_flags[i] & BTF_FMODEL_STRUCT_ARG)
+                       return -ENOTSUPP;
+       }
+
        ret = prepare_trampoline(&ctx, im, tlinks, orig_call, nargs, flags);
        if (ret < 0)
                return ret;