CVE-2026-23380Linux内核tracing子系统存在引用计数错误漏洞。当进程fork时,子进程复制父进程VMA但未增加user_mapped计数。若应用使用madvise(MADV_DOFORK)重置VM_DONTCOPY,父子进程退出时会触发tracing_buffers_mmap_close重复调用,导致内核WARN_ON及潜在的拒绝服务风险。
该漏洞发生于Linux内核的tracing模块,具体涉及`tracing_buffers_mmap_close`函数。漏洞核心在于虚拟内存区域(VMA)引用计数管理不当。在标准流程中,trace buffer映射使用`VM_DONTCOPY`标志,防止其在`fork()`系统调用中被子进程继承。然而,`madvise(MADV_DOFORK)`系统调用允许用户空间程序覆盖此标志,强制内核在fork时复制该VMA。复制过程中,内核仅复制了VMA结构,却未同步增加代表用户映射数量的`user_mapped`引用计数。因此,当父进程和子进程相继终止并关闭文件描述符时,`tracing_buffers_mmap_close`会被执行两次。第二次执行时,由于计数器异常归零,触发警告并返回错误,导致系统潜在的拒绝服务。