CVE-2026-64510 in Linux
Tóm tắt
Bởi VulDB • 26/07/2026
Trong nhân Linux, lỗ hổng sau đây đã được khắc phục:
ACPI: NFIT: core: Sửa lỗi dọn dẹp khi khởi tạo (error cleanup) trong hàm acpi_nfit_init()
Nếu hàm acpi_nfit_init() thất bại sau khi đối tượng acpi_desc đã được thêm vào danh sách acpi_descs, thì đối tượng này sẽ không bao giờ bị xóa khỏi danh sách đó vì hành động devm của acpi_nfit_shutdown() không được thêm cho thiết bị NFIT trong trường hợp này. Tiếp theo, việc thất bại của hàm acpi_nfit_init() khiến hàm acpi_nfit_probe() cũng thất bại; đối tượng acpi_desc sẽ bị giải phóng (freed), để lại một con trỏ treo (dangling pointer) trong danh sách acpi_descs. Bất kỳ ngoại lệ Kiểm tra Máy chủ ACPI (ACPI Machine Check Exception - MCE) nào sau đó đều sẽ kích hoạt hàm nfit_handle_mce(), hàm này lặp qua danh sách acpi_descs, dẫn đến lỗi sử dụng sau khi giải phóng bộ nhớ (use-after-free).
Hơn nữa, nếu hàm acpi_nfit_probe() trả về 0 sau khi cài đặt trình xử lý thông báo (notify handler) cho thiết bị NFIT mà không cấp phát đối tượng acpi_desc và không đặt con trỏ dữ liệu điều khiển driver của thiết bị NFIT, thì đối tượng acpi_desc sẽ được cấp phát bởi hàm acpi_nfit_update_notify() và hàm acpi_nfit_init() sẽ được gọi để khởi tạo nó. Bất kể việc hàm acpi_nfit_init() có thất bại trong trường hợp này hay không, hành động devm của acpi_nfit_shutdown() cũng không được thêm cho thiết bị NFIT và đối tượng acpi_desc không bao giờ bị xóa khỏi danh sách acpi_descs. Nếu đối tượng acpi_desc bị giải phóng sau đó khi gỡ driver, bất kỳ lỗi MCE ACPI nào tiếp theo sẽ dẫn đến lỗi use-after-free giống như trong trường hợp trước đó.
Để xử lý vấn đề đầu tiên nêu trên, hãy khiến hàm acpi_nfit_probe() gọi trực tiếp hàm acpi_nfit_shutdown() ngay khi có lỗi từ hàm acpi_nfit_init(); và để giải quyết vấn đề còn lại, hãy thêm một callback gỡ bỏ (remove callback) vào driver và khiến nó gọi hàm acpi_nfit_shutdown(). Ngoài ra, vì giờ đây là khả thi truyền giá trị NULL cho hàm acpi_nfit_shutdown() hoặc đối tượng acpi_desc được truyền vào có thể chưa được khởi tạo, hãy thêm các kiểm tra chống lại giá trị NULL dành cho trường acpi_desc và trường nvdimm_bus của nó trong hàm đó, đồng thời khiến hàm acpi_nfit_unregister() xóa sạch (clear) trường sau khi hủy đăng ký bus NVDIMM.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.