CVE-2026-31397 in Linuxthông tin

Tóm tắt

Bởi VulDB • 28/05/2026

Trong kernel Linux, lỗ hổng bảo mật sau đây đã được khắc phục:

mm/huge_memory: sửa lỗi sử dụng folio NULL trong move_pages_huge_pmd()

Hàm move_pages_huge_pmd() xử lý UFFDIO_MOVE cho cả các THPs (Transparent Huge Pages) thông thường và các trang zero khổng lồ (huge zero pages). Đối với đường dẫn trang zero khổng lồ, src_folio được đặt rõ ràng thành NULL và được sử dụng làm giá trị sentinel để bỏ qua các thao tác trên folio như lock và rmap.

Trong nhánh trang zero khổng lồ, src_folio là NULL, do đó folio_mk_pmd(NULL, pgprot) truyền NULL qua folio_pfn() và page_to_pfn(). Với SPARSEMEM_VMEMMAP, điều này vô tình tạo ra một PFN (Page Frame Number) sai lệch, cài đặt một PMD (Page Middle Directory) trỏ đến bộ nhớ vật lý không tồn tại. Trên các mô hình bộ nhớ khác, đây là lỗi dereference NULL.

Sử dụng page_folio(src_page) để lấy folio huge zero hợp lệ từ page, vốn đã được lấy từ pmd_page() và vẫn hợp lệ trong suốt quá trình.

Sau commit d82d09e48219 ("mm/huge_memory: mark PMD mappings of the huge zero folio special"), các PMD huge zero đã di chuyển phải vẫn giữ trạng thái đặc biệt để vm_normal_page_pmd() tiếp tục coi chúng là các ánh xạ đặc biệt.

Hiện tại, move_pages_huge_pmd() tái tạo PMD đích trong nhánh trang zero khổng lồ, điều này làm mất trạng thái PMD như pmd_special() trên các kiến trúc có CONFIG_ARCH_HAS_PTE_SPECIAL. Kết quả là, vm_normal_page_pmd() có thể coi PMD huge zero đã di chuyển là một trang bình thường và làm hỏng bộ đếm tham chiếu (refcount) của nó.

Thay vì tái tạo PMD từ folio, hãy suy ra mục nhập đích từ src_pmdval sau khi gọi pmdp_huge_clear_flush(), sau đó xử lý siêu dữ liệu PMD theo cùng cách mà move_huge_pmd() xử lý các mục nhập đã di chuyển bằng cách đánh dấu nó là soft-dirty và xóa uffd-wp.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

chịu trách nhiệm

Linux

Đặt trước

09/03/2026

Tiết lộ

03/04/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00119

KEV

không

Các hoạt động

rất thấp

Nguồn

Do you want to use VulDB in your project?

Use the official API to access entries easily!