1、bpf:Fixed tailcall issues第三届 eBPF开发者大会Leon Hwang2025/04/19中国 西安 Author of eBPF Talk Contributor of pwru,eCapture,drgn Creator of bpfsnoop Independent bpf subsystem contributor BPF contributions:https:/bit.ly/4d9eOWa Blog:https:/ GitHub:https:/ bpfsnoop:https:/第三届eBPF开发者大会Profile1.Fixed tailcall infi
2、nite loop issue caused by trampoline2.Fixed tailcall hierarchy issue3.Fixed crash caused by freplace+prog_array4.Fixed tailcall infinite loop issue caused by freplaceTo explain each issue:How did I find it?What was it?How to fix it?第三届eBPF开发者大会Agendatailcall in bpf2bpf on x86第三届 eBPF开发者大会Prerequisit
3、e:中国 西安 How does tailcall in bpf2bpf work?bpf2bpf means a bpf prog calls another bpf prog directly.The callee bpf prog is named subprog.tailcall in bpf2bpf is the subprog has bpf_tail_call().tail_call_cnt is used to limit the total times of calling bpf_tail_call().tail_call_cnt is propagated by%rax
4、between the caller and the callee.第三届eBPF开发者大会tailcall in bpf2bpf on x860:Fixed tailcall infinite loopissue caused by trampoline第三届 eBPF开发者大会中国 西安 How did I find it?It was found when I studied the 8KiB stack space limit.-When a prog has tailcall,its stack space limits to 256B.-When there are 32 tail
5、calls,the total consumed stack space will be 8Kib+512B at most.第三届eBPF开发者大会Fixed tailcall infinite loop issue caused by trampoline How did I find it?-What if increment the consumed stack space?-What I tried:-Run tailcall in subprog.-Tail callee is the entry prog.-Trace the subprog with fexit in orde
6、r to consume more stack with trampoline.第三届eBPF开发者大会Fixed tailcall infinite loop issue caused by trampoline What was it?-What did I get?-A kernel crash at that time.-Try again?-No tailcall happens=tailcall is skipped.第三届eBPF开发者大会Fixed tailcall infinite loop issue caused by trampoline How to fix it?F