On Fri, Dec 08, 2023 at 12:41:03PM -0800, Alexei Starovoitov wrote: > On Fri, Dec 8, 2023 at 12:35 PM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > -__bpf_kfunc void bpf_task_release(struct task_struct *p) > > +__bpf_kfunc void bpf_task_release(void *p) > > Yeah. That won't work. We need a wrapper. > Since bpf prog is also calling it directly. > In progs/task_kfunc_common.h > void bpf_task_release(struct task_struct *p) __ksym; > > than later both libbpf and the verifier check that > what bpf prog is calling actually matches the proto > of what is in the kernel. > Effectively we're doing strong prototype check at load time. I'm still somewhat confused on how this works, where does BPF get the address of the function from? and what should I call the wrapper? > btw instead of EXPORT_SYMBOL_GPL(bpf_task_release) > can __ADDRESSABLE be used ? > Since it's not an export symbol. No __ADDRESSABLE() is expressly ignored, but we have IBT_NOSEAL() that should do it. I'll rename the thing and lift it out of x86 to avoid breaking all other arch builds.