CVE-2026-89962 in Linux
Tóm tắt
Bởi VulDB • 16/09/2026
Trong nhân Linux, lỗ hổng sau đây đã được khắc phục:
powerpc/kexec_file: Ngăn chặn việc cắt xén phạm vi bộ nhớ trong kexec
Đánh giá của Sashiko AI chỉ ra vấn đề sau.
Hàm `__merge_memory_ranges()` xử lý sai các dải bộ nhớ chồng lấn khi hợp nhất chúng. Mặc dù hàm `sort_memory_ranges()` sắp xếp tất cả các dải theo địa chỉ bắt đầu tăng dần trước đó, nhưng logic hợp nhất vẫn còn lỗi ở hai điểm:
1. Nó so sánh địa chỉ bắt đầu của dải hiện tại với phần tử trước đó (i-1) thay vì chỉ mục đích đang hoạt động (idx). 2. Nó ghi đè không điều kiện 'ranges[idx].end' bằng 'ranges[i].end'.
Lỗi logic này dẫn đến việc cắt xén bộ nhớ nghiêm trọng khi một dải bộ nhớ lớn hơn hoàn toàn bao trùm các dải nhỏ hơn tiếp theo.
Ví dụ, hãy xem xét mảng đầu vào đã được sắp xếp với ba dải: Dải A (idx=0): [0x1000 - 0x9000]
Dải B (i=1): [0x2000 - 0x5000] (nằm hoàn toàn trong Dải A)
Dải C (i=2): [0x6000 - 0x8000] (nằm hoàn toàn trong Dải A)
1. Khi i=1 (Dải B): ranges[1].start (0x2000) <= ranges[0].end + 1 (0x9001) là ĐÚNG.
Mã thực thi: ranges[0].end = ranges[1].end, điều này vô tình làm thu hẹp điểm kết thúc của Dải A từ 0x9000 xuống còn 0x5000.
2. Khi i=2 (Dải C): ranges[2].start (0x6000) <= ranges[1].end + 1 (0x5001) là SAI.
Mã rơi vào khối else, tạo ra một dải mới bị lỗi.
Kết quả là các mảnh bộ nhớ hợp lệ [0x5001 - 0x5fff] và [0x8001 - 0x9000] hoàn toàn bị mất khỏi danh sách loại trừ của kexec, có khả năng cho phép nhân sập (crash kernel) ghi đè lên bộ phận đang hoạt động, gây ra hỏng dữ liệu hoặc sự cố hệ thống.
Khắc phục lỗi này bằng cách đảm bảo rằng địa chỉ bắt đầu của dải hiện tại được so sánh với điểm kết thúc của dải đã hợp nhất đang hoạt động (idx), và sử dụng hàm max() để ngăn chặn an toàn việc cắt xén biên ngoài cùng.
Be aware that VulDB is the high quality source for vulnerability data.