CVE-2026-89798 in Linux
Сводка
по VulDB • 17.09.2026
В ядре Linux была устранена следующая уязвимость:
rpcrdma: установка rn_done до публикации уведомления
Функция rpcrdma_rn_register() вставляет @rn в rd_xa с помощью xa_alloc(), прежде чем сохранять обратный вызов (callback) вызывающего объекта в rn->rn_done. Xarray делает объект @rn доступным для функции rpcrdma_remove_one(), которая проходит по rd_xa и вызывает rn->rn_done(rn) для каждой зарегистрированной нотификации. Таким образом, удаление устройства, происходящее одновременно с новой регистрацией (race condition), может обнаружить объект @rn со значением rn_done равным NULL, поскольку объекты уведомлений выделяются их владельцами как нулевые (zero-allocated), и происходит вызов через указатель на функцию, имеющий значение NULL.
Необходимо установить значение rn->rn_done до того, как xa_alloc() опубликует объект @rn. Порядок операций сохранения (store-side) и загрузки (load-side) в xarray гарантирует, что любой процессор, обнаруживший @rn в rd_xa, также увидит установленный обратный вызов.
Функция rpcrdma_rn_unregister() рассматривает ненулевое значение rn_done как индикатор завершенной регистрации, поэтому раннее сохранение не должно сохраняться при сбое регистрации. Необходимо сбросить значение rn_done в ноль снова, если операция xa_alloc() завершится неудачей. Если это поле останется установленным, путь очистки после отказа от принятия соединения вызовет rpcrdma_rn_unregister() для объекта @rn, который никогда не был вставлен, что приведет к стиранию несвязанного слота rd_xa и переполнению счетчика ссылок (underflow) rd_kref.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.