CVE-2026-31575该漏洞位于Linux内核的mm/userfaultfd组件中。由于在计算hugetlb故障互斥锁哈希时,使用了PAGE_SIZE单位的索引而非huge page单位,导致同一huge page内的不同地址使用了错误的互斥锁。这使得并发操作时产生竞态条件,进而破坏保留映射并触发内核断言失败,导致系统崩溃。
漏洞原理在于`mfill_atomic_hugetlb`函数调用`linear_page_index()`计算哈希值供`hugetlb_fault_mutex_hash`使用。`linear_page_index`返回的是基于系统页大小(如4KB)的索引,而`hugetlb_fault_mutex_hash`期望的是基于大页大小(如2MB)的索引。这种单位不匹配导致属于同一大页的不同偏移地址映射到了不同的哈希桶,从而获取了不同的互斥锁。这破坏了对大页操作的原子性保护。多线程并发时,这种竞态条件会损坏`resv_map`数据结构,导致`resv_map_release()`中的`BUG_ON`被触发,造成内核崩溃。