All of lore.kernel.org
 help / color / mirror / Atom feed
* Question about pointer to forward type
@ 2021-10-15 14:22 Hou Tao
  2021-11-03  3:58 ` Yonghong Song
  0 siblings, 1 reply; 4+ messages in thread
From: Hou Tao @ 2021-10-15 14:22 UTC (permalink / raw)
  To: Yonghong Song, Martin KaFai Lau; +Cc: bpf, Alexei Starovoitov, Andrii Nakryiko

Hi,

When adding test case for BPF STRUCT OPS, I got the following error
during test:

libbpf: load bpf program failed: Permission denied
libbpf: -- BEGIN DUMP LOG ---
libbpf:
R1 type=ctx expected=fp
; int BPF_PROG(test_1, struct bpf_dummy_ops_state *state)
0: (b4) w0 = -218893067
; int BPF_PROG(test_1, struct bpf_dummy_ops_state *state)
1: (79) r1 = *(u64 *)(r1 +0)
func 'test_1' arg0 type FWD is not a struct
invalid bpf_context access off=0 size=8

The error is reported from btf_ctx_access(). And the cause is
the definition of struct bpf_dummy_ops_state is separated from
the definition of test_1 function:

test_1 is defined in include/linux/bpf.h

struct bpf_dummy_ops_state;
struct bpf_dummy_ops {
        int (*test_1)(struct bpf_dummy_ops_state *cb);
}

bpf_dummy_ops_state is defined in net/bpf/bpf_dummy_struct_ops.c

struct bpf_dummy_ops_state {
};

So arg0 has BTF_KIND_FWD type, and the check in btf_ctx_access() fails.
The problem can be fixed by moving the definition of bpf_dummy_ops_state
into include/linux/bpf.h or using a void * instead of
struct bpf_dummy_ops_state *. But forward declaration is possible under
STRUCT_OPS scenario, so my question is whether or not it is a known issue
and is there somebody working on this ?

Regards,
Tao

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-11-03 19:22 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-15 14:22 Question about pointer to forward type Hou Tao
2021-11-03  3:58 ` Yonghong Song
2021-11-03 11:00   ` Hou Tao
2021-11-03 19:22     ` Yonghong Song

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.