最近在排查一个crash文件的时候,遇到一个堆栈,即软中断收包的时候,skb的关联的dev是null,导致oops,
然后去crash分析的时候,发现skb的dev去不是null。
从oops到crash收集完毕,按道理是一段极为短的时间,因为,x86的架构,oops时会发送nmi给其他各个核要求stop。
从crash看,当时触发oops时,rip异常,这点是肯定的,分析crash时,原本异常的值从内存中读出来是正常也是肯定的,那么概率很大的可能是,
在这段极短的时间内,这个内存地址存在异常并发访问。
走查对应的skb分配并且赋值dev的代码,发现一个问题,i40e的2.0.30版本,存在skb的一种uaf问题。
然后找intel管网,对比新的驱动,发现这个bug已经被修复。