In the Linux kernel, the following vulnerability has been resolved: bpf: consider that tail calls invalidate packet pointers Tail-called programs could execute any of the helpers that invalidate packet pointers. Hence, conservatively assume that each tail call invalidates packet pointers. Making the change in bpfhelperchangespktdata() automatically makes use of checkcfg() logic that computes 'changespktdata' effect for global sub-programs, such that the following program could be rejected: int tailcall(struct skbuff *sk) { bpftailcallstatic(sk, &jmptable, 0); return 0; } SEC("tc") int notsafe(struct skbuff *sk) { int *p = (void *)(long)sk->data; ... make p valid ... tailcall(sk); p = 42; / this is unsafe */ ... } The tcbpf2bpf.c:subprogtc() needs change: mark it as a function that can invalidate packet pointers. Otherwise, it can't be freplaced with tailcallfreplace.c:entryfreplace() that does a tail call.