CVE-2026-43224Linux内核的io_uring子系统中的零拷贝接收(zcrx)模块存在一个内存泄漏漏洞。该漏洞源于在特定32位架构但支持64位DMA的机器上,当DMA映射初始化失败时,错误处理路径未能正确释放已分配的scatter-gather table(sgtable)。由于代码逻辑中`!is_mapped`条件阻止了清理操作的执行,导致内核内存资源泄漏。攻击者需拥有本地低权限账号,通过恶意调用相关系统接口可触发此漏洞,长期利用可能导致系统内存耗尽,从而引发拒绝服务。
该漏洞位于Linux内核的`io_uring/zcrx`驱动实现中,具体涉及`io_zcrx_map_area`函数。在正常的零拷贝接收流程中,系统需要调用`sg_alloc_table`初始化sgtable,随后调用`io_populate_area_dma`进行DMA区域填充和映射。然而,在`PAGE_POOL_32BIT_ARCH_WITH_64BIT_DMA`架构上,`io_populate_area_dma`可能失败。此时,代码进入错误处理路径,但该路径下的资源释放逻辑(如`sg_free_table`)被包含在`if (is_mapped)`的判断块内。由于映射操作失败,`is_mapped`标志为假,导致已分配的sgtable未被释放,形成内存泄漏。攻击者通过本地环境反复触发此失败路径,可累积消耗内核内存,最终导致系统崩溃或服务中断。