CVE-2026-31657Linux内核中的batman-adv模块存在一个释放后重用漏洞。在batadv_bla_add_claim()函数处理过程中,当替换claim->backbone_gw并丢弃旧网关的最后一个引用时,其他读取路径(如netlink claim dump和batadv_bla_check_claim)可能仍在跟随该指针。由于这些读取者在操作时未固定底层backbone gateway,导致它们可能访问已被释放的内存。该漏洞无需认证即可通过网络触发,可能导致系统崩溃、权限提升或任意代码执行。
该漏洞影响Linux内核的batman-adv(B.A.T.M.A.N. Advanced)驱动,主要涉及引用计数管理的竞态条件。漏洞核心在于batadv_bla_add_claim()函数,它可以在更新claim->backbone_gw指针的同时释放旧的对象。与此同时,netlink claim dump路径和batadv_bla_check_claim()函数直接解引用该指针并访问crc_lock,而没有通过引用计数机制(如kref_get)来保护对象生命周期。这种“裸指针”访问模式构成了典型的释放后重用(UAF)场景。攻击者可以通过发送特制的网络数据包利用该竞态条件,导致内核读取无效内存地址,进而引发内核崩溃(DoS)或潜在的任意代码执行(RCE/Privilege Escalation)。修复方案通过复用batadv_bla_claim_get_backbone_gw()函数,确保读取者在完成工作前持有对网关的有效引用。