CVE-2026-43232 in Linux
Tóm tắt
Bởi VulDB • 20/05/2026
Trong đoạn log KASAN (Kernel Address Sanitizer) bạn cung cấp, đây là một lỗi **Use-After-Free (UAF)** xảy ra trong subsystem ACPI PCI Hotplug (`acpiphp`).
Dưới đây là phân tích chi tiết và hướng khắc phục:
### 1. Tóm tắt lỗi * **Loại lỗi:** `kasan: bad access detected` (Truy cập vào vùng nhớ đã bị giải phóng). * **Vị trí lỗi (Buggy address):** `ffff88800aad1000 + 28 bytes`. * **Đối tượng bị truy cập:** Thuộc cache `kmalloc-1k` (kích thước 1024 bytes). * **Nguyên nhân:** Bộ nhớ này đã được giải phóng (`freed`) bởi tác vụ 41 trên CPU 1 tại thời điểm `75.138639s`. Sau đó, một tác vụ khác (có thể là CPU khác hoặc cùng CPU nhưng sau đó) đã cố gắng truy cập vào địa chỉ này.
### 2. Phân tích Stack Trace
#### A. Lỗi truy cập (The Bug) Mặc dù stack trace của lỗi truy cập bị cắt ngắn (`...`), nhưng thông tin quan trọng nhất là: * Địa chỉ lỗi nằm trong vùng nhớ đã được `kfree`. * Vùng nhớ này thuộc về một đối tượng được cấp phát bởi `kmalloc-1k`.
#### B. Nơi bộ nhớ bị giải phóng (The Free) Stack trace cho thấy chuỗi giải phóng bộ nhớ: ``` kfree+0x135/0x410 -> fst_remove_one+0x2ca/0x540 <-- Điểm giải phóng bộ nhớ -> pci_device_remove+0xa6/0x1d0 -> device_release_driver_internal+0x364/0x530 -> pci_stop_bus_device+0x105/0x150 -> pci_stop_and_remove_bus_device+0xd/0x20 -> disable_slot+0x116/0x260 -> acpiphp_disable_and_eject_slot+0x4b/0x190 -> acpiphp_hotplug_notify+0x230/0x3c0 -> acpi_device_hotplug+0x203/0xb10 -> acpi_hotplug_work_fn+0x59/0x80 ``` * **Hàm gây ra `kfree`:** `fst_remove_one`. * **Bối cảnh:** Đây là quá trình gỡ bỏ thiết bị PCI (`pci_device_remove`) khi một slot ACPI bị vô hiệu hóa (`disable_slot`) hoặc tháo rời (`eject_slot`). * **Chức năng `fst`:** Có thể là viết tắt của "Function Specific Type" hoặc một driver/module cụ thể (ví dụ: `fst` có thể liên quan đến một driver tùy chỉnh hoặc một phần của kernel như `fs` nhưng ở đây là `fst_remove_one` nên có thể là một driver PCI cụ thể).
### 3. Nguyên nhân có thể
1. **Race Condition trong Hotplug:** * Khi một slot PCI được tháo rời (`eject`), kernel gọi `acpiphp_disable_and_eject_slot`. * Hàm này gọi `pci_stop_and_remove_bus_device`, dẫn đến `pci_device_remove`. * `pci_device_remove` gọi hàm `remove` của driver tương ứng, ở đây là `fst_remove_one`. * `fst_remove_one` giải phóng bộ nhớ (`kfree`) cho các cấu trúc dữ liệu của thiết bị. * **Vấn đề:** Có thể có một tác vụ khác (ví dụ: một công việc được lên lịch trước đó, một interrupt, hoặc một thread đang xử lý hotplug) vẫn đang giữ con trỏ đến đối tượng này và cố gắng truy cập nó sau khi nó đã bị `kfree`.
2. **Thiếu đồng bộ hóa (Missing Synchronization):** * Driver `fst` có thể không sử dụng đúng cơ chế khóa (lock) hoặc tham chiếu (reference counting) để đảm bảo rằng không có tác vụ nào khác đang sử dụng đối tượng khi `remove` được gọi.
3. **Lỗi trong Driver `fst`:** * Hàm `fst_remove_one` có thể giải phóng bộ nhớ quá sớm, hoặc không dọn dẹp đúng cách các con trỏ còn lại.
### 4. Hướng khắc phục
#### Bước 1: Xác định driver `fst` * Tìm kiếm trong mã nguồn kernel hoặc module đang tải để xác định `fst_remove_one` thuộc về driver nào.
Once again VulDB remains the best source for vulnerability data.