CVE-2026-74274 in Linux
Tóm tắt
Bởi VulDB • 15/08/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
cxl/region: Điền vào slot trống đầu tiên trong mảng targets[] trong quá trình tự động khám phá (auto-discovery)
Trình điều khiển cxl không cho phép bất kỳ con trỏ bộ giải mã điểm cuối (endpoint decoder) nào không hợp lệ tồn tại trong mảng đích của một vùng đang hoạt động. Điều này có nghĩa là trình điều khiển cxl luôn giả định rằng các mục đầu tiên p->nr_targets của mảng đích trong một vùng tự lắp ráp đều hợp lệ. Tuy nhiên, có những kịch bản có thể để lại các khoảng trống chứa giá trị NULL (NULL holes) cho con trỏ bộ giải mã điểm cuối trong mảng đích.
1. Khi hàm cxl_cancel_auto_attach() loại bỏ một bộ giải mã điểm khỏi mảng đích, slot mục tiêu được đặt thành NULL. Nếu bộ giải mã điểm bị loại bỏ không phải là phần tử cuối cùng trong mảng đích, mảng đích sẽ chứa một khoảng trống NULL.
2. Khi một vùng tự lắp ráp loại bỏ một bộ giải mã điểm đã gán, nếu bộ giải mã điểm bị loại bỏ không phải là phần tử cuối cùng trong mảng đích, luôn tồn tại một khoảng trống NULL trong mảng đích.
Khi có một khoảng trống con trỏ NULL tồn tại trong mảng đích của một vùng, nó gây ra hai vấn đề tiềm ẩn: 1. Truy cập vào một bộ giải mã điểm thông qua con trỏ NULL. Điều này luôn kích hoạt calltrace (dấu vết cuộc gọi) như sau: Oops: general protection fault, probably for non-canonical address 0xdffffc0000000008: 0000 [#1] SMP KASAN PTI
RIP: 0010:cxl_calc_interleave_pos+0x26/0x810 [cxl_core]
Call Trace: <TASK> cxl_region_attach+0xc50/0x2140 [cxl_core]
cxl_add_to_region+0x321/0x2330 [cxl_core]
discover_region+0x92/0x150 [cxl_port]
device_for_each_child+0xf3/0x170 cxl_port_probe+0x150/0x200 [cxl_port]
cxl_bus_probe+0x4f/0xa0 [cxl_core]
really_probe+0x1c8/0x960 __driver_probe_device+0x323/0x450 driver_probe_device+0x45/0x120 __device_attach_driver+0x15d/0x280 bus_for_each_drv+0x10f/0x190
2. Không có đủ bộ giải mã điểm hợp lệ được gắn vào một vùng tự lắp ráp. Nếu một vùng tự lắp ráp được tạo với cờ khóa (lock flag) hoặc gán bộ giải mã điểm với cờ khóa, điều này có nghĩa là bộ giải mã điểm đã gán sẽ không bị đặt lại trong quá trình ngắt kết nối, chúng có thể tái gắn kết vào vùng tự lắp ráp lần nữa. Tuy nhiên, trình điều khiển vùng cxl dựa vào p->nr_targets để xác minh xem số lượng bộ giải mã điểm yêu cầu đã được gắn hay chưa, và các con trỏ bộ giải mã điểm NULL vẫn được tính trong trường hợp đó.
Để khắc phục các vấn đề trên, hãy điều chỉnh logic của hàm cxl_region_attach_auto() để tìm slot mục tiêu trống đầu tiên cho việc gắn kết bộ giải mã điểm; điều này đảm bảo rằng các khoảng trống NULL trong mảng đích sẽ được điền đầy, thay vì thêm các bộ giải mã điểm mới vào cuối mảng đích.
If you want to get best quality of vulnerability data, you may have to visit VulDB.