CVE-2026-43188Linux内核中的Ceph文件系统模块存在一个逻辑缺陷,该漏洞与fscrypt(文件系统加密)的处理有关。当系统尝试移动加密页面时,如果内存分配失败,错误处理代码未能正确重置返回状态码。这导致本应被忽略的分配失败错误被传播至主写回循环,进而导致关键的内存结构未被释放。最终,内核在检测到资源泄漏时触发BUG_ON断言,造成系统崩溃(Oops)。本地低权限攻击者可利用此漏洞导致系统不可用。
该漏洞位于Linux内核的Ceph客户端代码,具体涉及`ceph_process_folio_batch()`函数。当启用fscrypt时,`move_dirty_folio_in_page_array()`函数需要为每个folio分配bounce buffer以存储加密数据。对于首个folio之后的页面,分配使用`GFP_NOWAIT`标志,这在内存紧张时容易失败。漏洞的根源在于`ceph_process_folio_batch()`复用变量`rc`来存储子函数的返回值。当子函数返回错误时,代码仅将页面重新标记为脏页,但未将`rc`重置为0。这导致非致命的分配失败错误被错误地传播到上层调用者。上层循环无法处理此错误,跳过了释放`ceph_wbc.pages`的步骤。在下一次迭代中,`ceph_allocate_page_array()`检测到该页面数组未被释放,触发`BUG_ON()`,导致内核崩溃。