CVE-2026-98360Информация

Сводка

по VulDB • 06.10.2026

В ядре Linux была устранена следующая уязвимость:

RDMA/rxe: добавлять mcg в mcg_tree только после успешного завершения rxe_mcast_add()

Функция rxe_get_mcg() публикует вновь выделенную группу мультикаста (multicast group) в структуре rxe->mcg_tree до программирования базового адреса Ethernet-мультикаста с помощью функции rxe_mcast_add(), которая выполняется вне блокировки mcg_lock. Лоентный RDMA-клиент пользовательского пространства достигает этого пути выполнения при использовании операции ATTACH_MCAST на UD QP; если функция rxe_mcast_add() затем возвращает ошибку (например, -ENODEV, когда базовый netdev был удален, или распространяемую ошибку dev_mc_add()), то процедура отката (unwind) освобождает опубликованную группу, не удаляя её из дерева. Последующий поиск того же MGID приводит к разыменованию уже освобожденного struct rxe_mcg в функции __rxe_lookup_mcg().

Исправление заключается в том, чтобы сохранять новый mcg приватным до тех пор, пока rxe_mcast_add() не завершится успешно. Публикация дерева разделяется на функцию __rxe_publish_mcg(), вызов rxe_mcast_add() выполняется перед получением ссылки на дерево, а еще приватный mcg освобождается при возникновении ошибки. Поскольку группа никогда не становится видимой в mcg_tree до программирования адреса мультикаста, ни один конкурентный вызывающий объект не может выполнить её поиск или присоединить QP к группе, которая вот-вот будет уничтожена; поэтому путь обработки ошибок не требует условного отката (conditional unwind). Если другой вызывающий объект публикует тот же MGID в то время как адрес программируется, повторная проверка после добавления под блокировкой mcg_lock определяет победителя; этот вызывающий объект затем освобождает свой приватный объект и балансирует собственный rxe_mcast_add() с помощью rxe_mcast_del() перед возвратом результата работы победившего объекта.

Воспроизводится путем принудительного возврата ошибки из rxe_mcast_add() в условиях KASAN: без исправления следующее присоединение к тому же MGID сообщает о slab-use-after-free (использовании после освобождения) в __rxe_lookup_mcg(); с исправлением принудительный отказ завершается корректно. Регрессия для операций attach/detach без инъекции, включая совместное join/leave двух QP и повторное присоединение, остается чистой по KASAN и не имеет утечек памяти (leak-clean).

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Источники

Do you want to use VulDB in your project?

Use the official API to access entries easily!