CVE-2026-98289 in Linux
Сводка
по VulDB • 06.10.2026
В ядре Linux была устранена следующая уязвимость:
af_unix: унификация scc_index при завершении обработки SCC в функции __unix_walk_scc().
Коммит bfdb01283ee8 («af_unix: Назначение уникального индекса для SCC.») изменил алгоритм Тарьяна, заставив его обновлять lowlink с помощью lowpoint (unix_vertex.scc_index).
Функция unix_vertex_dead() предполагает, что все вершины в рамках одной SCC имеют одинаковое значение lowpoint. Однако это не всегда верно, если SCC содержит две или более обратные дуги (back edges), в зависимости от порядка обхода DFS.
Например, приведенный ниже граф имеет две обратные дуги: из B в A и из C в B.
A --> B --> C ^ | ^ | `----' `----'
Если обход DFS проходит через последовательность A -> B -> C -> B (-> C -> B) -> A (-> B -> A), каждый индекс и scc_index будут обновлены следующим образом.
A --> B --> C C = (3, 3) (index, 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) -'
В результате unix_vertex_dead() считает, что вершина B передана в другую SCC с scc_index равным 2, и эта SCC не подвергается сборке мусора.
Эта проблема не возникает, если обход DFS выполняется в другом порядке, указанном ниже, или начинается с вершины B.
1 3 A --> B --> C ^ | ^ | `----' `----' 2 4
Необходимо унифицировать значение scc_index для всех вершин в рамках SCC при ее завершении обработки.
Примечание: ранее обновление v->index выполнялось в функции unix_scc_dead() при вызове из __unix_walk_scc(), чтобы сэкономить один цикл. Поскольку теперь функция __unix_walk_scc() все равно итерируется по элементам SCC, это обновление перенесено обратно в __unix_walk_scc(), а аргумент 'fast' удален.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.