Re: [RFC bpf-next 01/10] uprobe: Add session callbacks to uprobe_consumer

From: Oleg Nesterov
Date: Wed Jun 05 2024 - 13:58:37 EST


On 06/05, Andrii Nakryiko wrote:
>
> so any such
> limitations will cause problems, issue reports, investigation, etc.

Agreed...

> As one possible solution, what if we do
>
> struct return_instance {
> ...
> u64 session_cookies[];
> };
>
> and allocate sizeof(struct return_instance) + 8 *
> <num-of-session-consumers> and then at runtime pass
> &session_cookies[i] as data pointer to session-aware callbacks?

I too thought about this, but I guess it is not that simple.

Just for example. Suppose we have 2 session-consumers C1 and C2.
What if uprobe_unregister(C1) comes before the probed function
returns?

We need something like map_cookie_to_consumer().

> > + /* The handler_session callback return value controls execution of
> > + * the return uprobe and ret_handler_session callback.
> > + * 0 on success
> > + * 1 on failure, DO NOT install/execute the return uprobe
> > + * console warning for anything else
> > + */
> > + int (*handler_session)(struct uprobe_consumer *self, struct pt_regs *regs,
> > + unsigned long *data);
> > + int (*ret_handler_session)(struct uprobe_consumer *self, unsigned long func,
> > + struct pt_regs *regs, unsigned long *data);
> > +
>
> We should try to avoid an alternative set of callbacks, IMO. Let's
> extend existing ones with `unsigned long *data`,

Oh yes, agreed.

And the comment about the return value looks confusing too. I mean, the
logic doesn't differ from the ret-code from ->handler().

"DO NOT install/execute the return uprobe" is not true if another
non-session-consumer returns 0.

Oleg.