CVE-2026-31644Linux内核中的lan966x驱动程序存在一个释放后利用(UAF)和内存泄露漏洞。该漏洞源于`lan966x_fdma_reload`函数在处理DMA重载时的逻辑缺陷。当分配新的RX缓冲区失败时,恢复路径会重启DMA,但此时旧描述符所指向的内存页已被释放。硬件可能向已释放的内存写入数据,导致系统崩溃或潜在的权限提升。此外,错误处理路径还存在页池内存泄露问题。
该漏洞发生在Linux内核网络子系统`net: lan966x`的`lan966x_fdma_reload`函数中。其根本原因是在尝试分配新的RX缓冲区时,若分配失败,代码会执行恢复逻辑。在此过程中,系统已通过`lan966x_fdma_rx_free_pages`释放了旧的内存页至伙伴分配器,但随后又重新启用了DMA并使用了旧的描述符。由于硬件DMA操作不受立即停止影响,它会向已释放的物理地址写入数据,造成Use-After-Free。此外,如果在分配过程中部分创建了新的页池,恢复路径会直接覆盖该指针而不销毁旧对象,导致内存泄露。修复方案通过延迟释放旧页直到新分配成功,并保存旧页数组指针来确保回滚路径的安全性。