Thread (8 messages) 8 messages, 3 authors, 2020-07-29

Re: fentry/fexit attach to EXT type XDP program does not work

From: Jiri Olsa <hidden>
Date: 2020-07-29 08:15:28
Also in: bpf

On Wed, Jul 29, 2020 at 08:23:56AM +0200, Eelco Chaudron wrote:

SNIP
quoted
quoted
quoted
quoted
a patch
that would nice.
You can also send it to me before bpf-next opens and I can verify
it, and
clean up the self-test so it can be included as well.
hi,
it seems that you cannot exten fentry/fexit programs,
but it's possible to attach fentry/fexit to ext program.

   /* Program extensions can extend all program types
    * except fentry/fexit. The reason is the following.
    * The fentry/fexit programs are used for performance
    * analysis, stats and can be attached to any program
    * type except themselves. When extension program is
    * replacing XDP function it is necessary to allow
    * performance analysis of all functions. Both original
    * XDP program and its program extension. Hence
    * attaching fentry/fexit to BPF_PROG_TYPE_EXT is
    * allowed. If extending of fentry/fexit was allowed it
    * would be possible to create long call chain
    * fentry->extension->fentry->extension beyond
    * reasonable stack size. Hence extending fentry is not
    * allowed.
    */

I changed fexit_bpf2bpf.c test just to do a quick check
and it seems to work:
Hi Jiri this is exactly what I’m trying, however when you do this
where the
first argument is a pointer to some context data which you are
accessing
it’s failing in the verifier.
This is a link to the original email, which has a test patch
attached that
will show the failure when trying to load/attach the fentry function
and
access the context:

https://lore.kernel.org/bpf/159162546868.10791.12432342618156330247.stgit@ebuild/ (local)
ok, I tried to trace ext program with __sk_buff argument and I can see
the issue as well.. can't acess the skb argument

patch below fixes it for me, I can access the skb pointer and its data
via probe read, like:

	SEC("fexit/new_get_skb_ifindex")
	int BPF_PROG(fexit_new_get_skb_ifindex, int val, struct __sk_buff *skb,
int var, int ret)
	{
		__u32 data;
		int err;

		bpf_printk("EXIT skb %p", skb);
		bpf_probe_read_kernel(&data, sizeof(data), &skb->data);
		bpf_printk("EXIT ret %d, data %p", err, data);
		return 0;
	}

I think it should fix the xdp_md acess as well
Excellent patch ;) It works with xdp_md as well, and even better it does not
require the bpf_probe_read_kernel(), so the test_xdp_bpf2bpf.c code just
works.
great ;-) will check on xdp_md
Are you planning to send the patch upstream?
yep, I'll add some test for that and send it

thanks,
jirka
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help