CVE-2026-43178Linux内核procfs组件的do_procmap_query()函数中存在双重释放漏洞。当用户为PROCMAP_QUERY操作提供大小不正确的构建ID缓冲区时,函数将返回-ENAMETOOLONG错误。由于近期代码变更,错误检查发生在解锁mmap_lock并执行mmput()之后,导致原有的错误处理路径重复调用mmput()。这会造成mm_struct结构体的双重释放,进而可能导致本地特权提升或内核崩溃。
该漏洞源于Linux内核fs/proc/task_mmu.c文件中do_procmap_query()函数的错误处理逻辑缺陷。具体而言,当系统处理PROCMAP_QUERY请求以获取进程内存映射的构建ID时,需要检查用户提供的缓冲区大小。若缓冲区过小,理应返回-ENAMETOOLONG。然而,在受影响的版本中,代码逻辑调整导致该大小检查发生在释放mmap_lock及调用mmput()函数之后。mmput()用于递减mm_struct的引用计数,当计数归零时释放该结构。由于错误处理路径跳转到了旧的清理标签,导致程序再次执行了mmput()操作。这种双重释放不仅会导致内核内存管理数据结构损坏,还可能引发Use-After-Free(释放后重用)漏洞。本地低权限攻击者可利用此漏洞触发内核崩溃,或在特定条件下覆盖敏感内存数据,从而实现本地权限提升(LPE)。