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.