CVE-2026-31700Linux内核net/packet组件的tpacket_snd()函数存在TOCTOU竞态漏洞。启用PACKET_VNET_HDR时,内核在验证mmap共享内存中的vnet_hdr后再次读取,攻击者可利用竞态条件在验证与使用间隙修改数据,成功绕过内核安全检查,导致系统面临严重的机密性、完整性及可用性风险。
该漏洞源于Linux内核在处理TPACKET TX路径时的逻辑缺陷。当PACKET_VNET_HDR标志开启时,vnet_hdr指针直接指向用户空间通过mmap映射的TX环形缓冲区。相关代码先调用__packet_snd_vnet_parse()对头部进行验证,随后在virtio_net_hdr_to_skb()函数中重新读取这些字段。由于两次访问之间存在时间差,并发的用户空间线程可在验证通过后、实际使用前修改vnet_hdr的字段,导致原本不合法的恶意数据通过内核校验。这可能触发内存破坏或其他内核错误。修复方案是将vnet_hdr复制到栈上局部变量后再进行验证和使用,从而消除直接访问用户共享内存带来的竞态风险。