CVE-2026-31400CVE-2026-31400是Linux内核sunrpc组件中的一个中危漏洞。该漏洞源于cache_release函数中存在内存泄漏问题。当读取者的文件描述符在读取cache_request过程中(即偏移量不为0)被意外关闭时,cache_release仅减少读者计数但未执行释放请求对象的逻辑,导致内存泄漏。由于cache_dequeue仅在特定状态下清理,攻击者可利用此缺陷反复触发泄漏,最终导致内核内存耗尽,引发拒绝服务,严重影响系统可用性。
漏洞原理在于Linux内核sunrpc缓存处理逻辑中的清理机制不完善。正常情况下,cache_read会在readers计数降为0且CACHE_PENDING标志清除时释放cache_request及相关资源。然而,cache_release函数在处理文件描述符关闭时,仅负责递减readers计数,缺失了检查readers == 0以及是否需要释放内存的逻辑。此外,cache_dequeue仅会在CACHE_PENDING状态从设置变为清除的瞬间执行清理。如果该状态转换发生在readers非零期间,cache_dequeue会跳过该请求。随后即便readers降为零,由于状态已不再变化,该请求永远不会被释放,造成持续的内核内存泄漏。