CVE-2025-71110CVE-2025-71110是Linux内核中mm/slub内存分配器的一个高危安全漏洞。当CONFIG_SLUB_TINY配置启用时,kfree_nolock()函数在调用defer_free()之前会先调用kasan_slab_free()。在ARM64架构配合MTE(Memory Tagging Extension)使用时,kasan_slab_free()会将已释放内存的tag从原始值(如0xf3)更改为poison tag(0xfe)。随后defer_free()尝试通过llist_add()构建延迟释放链表时,由于指针仍保留旧tag,导致KASAN检测到tag不匹配并报告use-after-free错误。这是一个存在于内核内存分配子系统中的本地权限提升漏洞,攻击者可通过低权限账户触发此漏洞,可能导致系统崩溃或进一步的安全风险。
漏洞根源在于Linux内核SLUB分配器的延迟释放机制与KASAN内存消毒工具之间的交互问题。具体来说:1) 当CONFIG_SLUB_TINY启用时,kfree_nolock()首先调用kasan_slab_free()对已释放内存进行poison处理;2) 在ARM64 MTE环境下,kasan_slab_free()会将内存tag从原始值改为poison tag (0xfe);3) defer_free()函数随后尝试访问该内存以构建延迟释放链表,此时指针仍持有旧tag (0xf3);4) 由于tag不匹配,KASAN检测到slab-use-after-free错误并触发bug report。修复方案是在defer_free()访问已释放内存前调用kasan_reset_tag()重置tag,确保与当前内存状态一致。该操作是安全的,因为defer_free()本身就是内存分配器的一部分,有权对释放的内存进行簿记操作。攻击者可通过大量分配和释放内存触发快速路径的defer_free()调用来利用此漏洞。