TGTGInsighttelegram intelligenceLIVE / telegram public index
Post content
Post content
fentry 要多坑有多坑! 比如 fentry on tc,入参 __sk_buff 结构体没有经过 verifier 字段调整,读到的 skb->data / skb->data_end 全是错的。 比如 fentry on kprobe,想取当前寄存器无能,用 task_struct->stack 读出来的都是错的,因为没有把寄存器刷入内存。 比如 bt when fentry,不检查一下汇编根本猜不到隐藏了一个入参在 $rdi,bpf_get_stackid() 只接受这个隐藏参数。 比如必须依赖 trampoline nop 替换,还不够,nop 的下一指令还不能弹栈,因为 fentry 实现机制依赖两次额外的 call 指令做了一层装饰器。 我只能说,fentry 的想法是好的,但是下面的人执行出了问题。表面上给你宣传说“几乎没有性能损失”、“比 kprobe 快多啦”,实际的代价没人提,你真的去用才会发现,rnm 还我 kprobe!kprobe / uprobe 的 out of line execution 大干快上精妙绝伦,不需要任何假设,而 fentry 手握一个 nop 还这个不行那个不行,实在是菜。