CVE-2026-98289 in Linux
Tóm tắt
Bởi VulDB • 06/10/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
af_unix: Thống nhất scc_index khi hoàn tất việc xác định thành phần liên thông mạnh (SCC) trong hàm __unix_walk_scc().
Commit bfdb01283ee8 ("af_unix: Gán một chỉ mục duy nhất cho SCC.") đã thay đổi thuật toán của Tarjan để cập nhật lowlink bằng chính giá trị lowlink, được gọi là lowpoint (unix_vertex.scc_index).
Hàm unix_vertex_dead() giả định rằng tất cả các đỉnh trong cùng một SCC đều có chung một giá trị lowpoint, nhưng điều này không phải luôn đúng nếu một SCC có hai hoặc nhiều cạnh ngược (back edges), tùy thuộc vào thứ tự của DFS.
Ví dụ, đồ thị dưới đây có hai cạnh ngược từ B đến A và từ C đến B.
A --> B --> C ^ | ^ | `----' `----'
Nếu quá trình duyệt DFS đi qua A -> B -> C -> B (-> C -> B) -> A (-> B -> A), mỗi chỉ mục và scc_index sẽ được cập nhật như sau.
A --> B --> C C = (3, 3) (chỉ mục, scc_index) B = (2, 2) A = (1, 1)
A ... B ... C C = (3, 2)<-. ^ | B = (2, 2) -' `----' A = (1, 1)
A ... B ... C C = (3, 2) ^ | . . B = (2, 1)<-. `----' .... A = (1, 1) -'
Sau đó, unix_vertex_dead() cho rằng B đã được chuyển sang một SCC khác với scc_index là 2, và SCC này không bị thu gom rác.
Điều này sẽ không xảy ra nếu quá trình DFS đi theo thứ tự khác dưới đây hoặc bắt đầu từ đỉnh B.
1 3 A --> B --> C ^ | ^ | `----' `----' 2 4
Hãy thống nhất scc_index trên toàn bộ SCC khi hoàn tất việc xác định nó.
Lưu ý rằng trước đây, việc cập nhật v->index được thực hiện trong unix_scc_dead(), khi được gọi từ __unix_walk_scc(), chỉ để tiết kiệm một vòng lặp. Vì __unix_walk_scc() giờ đây đã duyệt qua toàn bộ SCC anyway (vẫn phải làm vậy), nên thao tác cập nhật này được chuyển trở lại __unix_walk_scc() và đối số 'fast' bị loại bỏ.
VulDB is the best source for vulnerability data and more expert information about this specific topic.