Ad

CVE-2026-89546

CRITICAL CVSS 3.1: 9,8 EPSS 0.55%
Обновлено 13 сентября 2026
Nfs
Параметр Значение
CVSS 9,8 (CRITICAL)
Поставщик Nfs
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: SUNRPC: закройте обратный канал перед уничтожением службы обратного вызова Прием по обратному каналу может завершить запрос, пока обратный вызов NFS сервис сносят. xprt_complete_bc_request() удаляет запрос из bc_pa_list, удаляет bc_alloc_count, отмечает используемый запрос, а затем просит xprt_enqueue_bc_request() передать его обратному вызову сервис. Если демонтаж уже очистил xprt->bc_serv, xprt_enqueue_bc_request() в настоящее время возвращается без постановки в очередь или освобождения зафиксированного запроса. Функция xprt_get(), полученная при входе, также просочилась.

Если продюсер выиграет гонка до того, как bc_serv будет очищена, она также может быть поставлена в очередь в sv_cb_list после того, как nfs_callback_down() остановил потоки обратного вызова, оставив запрос, связанный с svc_serv, который скоро будет освобожден. Закройте сторону производителя до остановки потоков обратного вызова. Добавить xprt_svc_shutdown_bc(), чтобы очистить xprt->bc_serv под bc_pa_lock и вызвать это при отключении обратного вызова и сбое запуска обратного вызова перед остановкой сервисные темы.

Запросы, которые теряют переход NULL в xprt_enqueue_bc_request() выпускаются через обычный обратный канал. свободный путь после балансировки bc_slot_count. Наконец, слейте все оставшиеся sv_cb_list запрашивает после остановки потоков обратного вызова и до svc_destroy() освобождает службу.

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: SUNRPC: close backchannel before destroying callback service A backchannel receive can complete a request while the NFS callback service is being torn down. xprt_complete_bc_request() removes the request from bc_pa_list, drops bc_alloc_count, marks the request in use, and then asks xprt_enqueue_bc_request() to hand it to the callback service. If teardown has already cleared xprt->bc_serv, xprt_enqueue_bc_request() currently returns without enqueueing or freeing the committed request. The xprt_get() taken on entry is leaked as well. If the producer wins the race before bc_serv is cleared, it can also enqueue onto sv_cb_list after nfs_callback_down() has stopped the callback threads, leaving the request linked to a svc_serv that is about to be freed. Close the producer side before callback threads are stopped. Add xprt_svc_shutdown_bc() to clear xprt->bc_serv under bc_pa_lock, and call it on callback shutdown and callback-start failure before stopping the service threads. Requests that lose the NULL transition in xprt_enqueue_bc_request() are released through the normal backchannel free path after balancing bc_slot_count. Finally, drain any remaining sv_cb_list requests after the callback threads have stopped and before svc_destroy() frees the service.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1