On Wed, Sep 09, 2020 at 05:54:58PM +0200, Toke Høiland-Jørgensen wrote: > Jiri Olsa <jolsa@xxxxxxxxxx> writes: > > > Eelco reported we can't properly access arguments if the tracing > > program is attached to extension program. > > > > Having following program: > > > > SEC("classifier/test_pkt_md_access") > > int test_pkt_md_access(struct __sk_buff *skb) > > > > with its extension: > > > > SEC("freplace/test_pkt_md_access") > > int test_pkt_md_access_new(struct __sk_buff *skb) > > > > and tracing that extension with: > > > > SEC("fentry/test_pkt_md_access_new") > > int BPF_PROG(fentry, struct sk_buff *skb) > > > > It's not possible to access skb argument in the fentry program, > > with following error from verifier: > > > > ; int BPF_PROG(fentry, struct sk_buff *skb) > > 0: (79) r1 = *(u64 *)(r1 +0) > > invalid bpf_context access off=0 size=8 > > > > The problem is that btf_ctx_access gets the context type for the > > traced program, which is in this case the extension. > > > > But when we trace extension program, we want to get the context > > type of the program that the extension is attached to, so we can > > access the argument properly in the trace program. > > > > Reported-by: Eelco Chaudron <echaudro@xxxxxxxxxx> > > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > --- > > kernel/bpf/btf.c | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c > > index f9ac6935ab3c..37ad01c32e5a 100644 > > --- a/kernel/bpf/btf.c > > +++ b/kernel/bpf/btf.c > > @@ -3859,6 +3859,14 @@ bool btf_ctx_access(int off, int size, enum bpf_access_type type, > > } > > > > info->reg_type = PTR_TO_BTF_ID; > > + > > + /* When we trace extension program, we want to get the context > > + * type of the program that the extension is attached to, so > > + * we can access the argument properly in the trace program. > > + */ > > + if (tgt_prog && tgt_prog->type == BPF_PROG_TYPE_EXT) > > + tgt_prog = tgt_prog->aux->linked_prog; > > + > > In the discussion about multi-attach for freplace we kinda concluded[0] > that this linked_prog pointer was going away after attach. I have this > basically working, but need to test a bit more before posting it (see > [1] for current status). ok, feel free to use the test case from patch 2 ;-) > > But with this I guess we'll need to either do something different? Maybe > go chase down the target via the bpf_link or something? I'll check, could you please CC me on your next post? thanks, jirka