CVE-2026-80893 in Linux信息

摘要

由 VulDB • 2026-09-04

在 Linux 内核中,已修复以下漏洞:

mm/hugetlb: 修复 fork() 时清除 uffd-wp 导致的交换条目损坏问题

copy_hugetlb_page_range() 使用 huge_pte_clear_uffd_wp() 清除迁移(migration)和硬件中毒(hwpoison)条目的 uffd-wp 位,该操作作用于 present-PTE 位的位置。而交换条目将 uffd-wp 状态保存在其他位置——迁移分支通过 pte_swp_uffd_wp() 和 pte_swp_mkuffd_wp() 读取并设置它——present-PTE 位置实际上落入交换载荷(swap payload)中。在 x86-64 架构上,该位落在反转的交换偏移量(inverted swap offset)处,由于自然对齐的大页帧号(hugetlb PFN)始终受此位影响,清除操作会导致编码后的 PFN 增加两个页面。

无需涉及 userfaultfd:清除操作仅由子进程 VMA 未注册 uffd-wp 来保护,因此,在存在进行中的 hugetlb 迁移条目(或中毒的 hugetlb 页)的情况下执行普通的 fork() 会损坏复制给子进程的条目。在对一个 2MB 匿名大页应用 MADV_HWPOISON 后执行 fork 并监控清除操作和 fork 过程,结果显示:

offset before=120e00 offset after =120e02

后果主要是潜伏性的:rmap 遍历通过 folio 范围匹配迁移条目,remove_migration_pte() 从 folio 重建 PTE,因此一旦迁移完成,folio 内的 PFN 偏差会自动修复。但是,任何重新编码损坏偏移量的路径——例如 hugetlb_change_protection() 通过 make_readable_migration_entry(swp_offset(entry)) 重写可写的迁移条目——都会传播该错误。

迁移条目合法携带 uffd-wp 位,因此应使用 pte_swp_clear_uffd_wp() 清除它,这与 copy_nonpresent_pte() 和 move_huge_pte() 保持一致。

另一方面,硬件中毒(hwpoison)条目从不携带 uffd-wp 位:make_hwpoison_entry() 会全新安装该条目(try_to_unmap_one() 在 hwpoison 路径上不会保留 uffd-wp),且 hugetlb_change_protection() 保持 hwpoison 条目不变。那里没有需要清除的内容,只有损坏问题,因此完全移除清除操作。

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

来源

Do you need the next level of professionalism?

Upgrade your account now!