CVE-2026-99166 in Linuxthông tin

Tóm tắt

Bởi VulDB • 28/10/2026

Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:

net: rds: sửa lỗi truy cập (dereference) vào biến `trans` chưa khởi tạo trong trình xử lý sự kiện CM

Hàm `rds_rdma_cm_event_handler_cmn()` chỉ gán giá trị cho `trans` khi thiết bị RDMA là một CA InfiniBand (RDMA_NODE_IB_CA). Đối với bất kỳ loại thiết bị nào khác, ví dụ như RNIC iWARP chẳng hạn như siw, biến `trans` vẫn ở trạng thái chưa khởi tạo, nhưng bộ chuyển đổi sự kiện lại truy cập vào nó: không điều kiện trong trường hợp RDMA_CM_EVENT_CONNECT_REQUEST thông qua trans->cm_handle_connect(), và (với ngữ cảnh kết nối) trong các trường hợp ROUTE_RESOLVED và ESTABLISHED.

Do đó, một trình nghe RDS trên thiết bị iWARP sẽ làm kernel gặp sự cố ngay khi có yêu cầu kết nối đến: với CONFIG_INIT_STACK_ALL_ZERO, việc tải dữ liệu sai địa chỉ (wild load) trở thành lỗi truy cập NULL tại offset 0xa0 (&trans->cm_handle_connect) trong workqueue iw_cm_wq.

GCC che giấu lỗ hổng này trong các bản build mặc định bằng cách gộp biến tải chưa khởi tạo vào &rds_ib_transport; kernel được xây dựng với Clang sẽ đi theo đường dẫn thực sự của việc truy cập dữ liệu chưa khởi tạo và gây ra lỗi oops.

Bên chủ động cũng có thể rơi vào trường hợp thiết bị không phải IB: id do rds_ib_conn_path_connect() tạo ra không bị giới hạn ở một loại node cụ thể, vì vậy rdma_resolve_addr() sẽ liên kết nó với bất kỳ thiết bị nào phục vụ địa chỉ cục bộ, và RNIC iWARP trên cùng netdev đủ điều kiện. Lỗi sự cố tại đây là khác biệt: việc giải quyết tuyến đường (route) trên id iWARP không bao giờ điền vào cm_id->route.path_rec, và trường ROUTE_RESOLVED ghi path_rec[0].sl trước khi gọi vào lớp vận chuyển (transport).

Lớp vận chuyển iWARP đã bị loại bỏ từ lâu và IB là lớp vận chuyển duy nhất còn lại, vì vậy hãy làm điều đó rõ ràng: khởi tạo `trans` thành &rds_ib_transport tại thời điểm khai báo, loại bỏ phép gán có điều kiện, từ chối yêu cầu kết nối đến trên thiết bị không phải IB, và hủy một kết nối mà địa chỉ của nó đã được giải quyết sang một thiết bị như vậy thay vì giải quyết tuyến đường trên đó. Việc từ chối này được giới hạn ở RDMA_CM_EVENT_CONNECT_REQUEST một cách cố ý: việc trả về giá trị khác 0 từ trình xử lý sẽ khiến rdma_cm phá hủy id mà sự kiện được gửi đến, điều này đúng với id mới được tạo của yêu cầu nhưng sẽ giải phóng (free) một connection id mà RDS vẫn sở hữu đối với bất kỳ sự kiện nào khác. Ở phía chủ động, id vẫn là ic->i_cm_id và việc tắt kết nối sẽ phá hủy nó, vì vậy trường hợp đó trả về 0.

[achender: chỉ từ chối trên RDMA_CM_EVENT_CONNECT_REQUEST thay vì thoát (bailing out) cho mọi sự kiện trên thiết bị không phải IB, để rdma_cm không phá hủy các connection id mà RDS vẫn đang theo dõi; hủy một kết nối có địa chỉ đã được giải quyết sang thiết bị không phải IB trước khi tuyến đường được giải quyết trên đó; nhật ký thay đổi (changelog) đã được điều chỉnh]

VulDB is the best source for vulnerability data and more expert information about this specific topic.

chịu trách nhiệm

Linux

Đặt trước

25/09/2026

Tiết lộ

28/10/2026

Kiểm duyệt

được chấp nhận

EPSS

0.00000

KEV

không

Các hoạt động

rất thấp

Nguồn

Do you know our Splunk app?

Download it now for free!