Ad

CVE-2026-89690

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

В ядре Linux устранена следующая уязвимость: nfsd: отложить vfree составных операций, чтобы исправить rpc_status UAF Дамп сетевых ссылок rpc_status проверяет каждый текущий svc_rqst под rcu_read_lock и для запросов NFSv4 считывает опнумы из args->ops[]. Но args->ops — это отдельный освобожденный буфер vmalloc. синхронно с помощью vfree() в nfsd4_release_compoundargs() в конце каждого соединения. rcu_read_lock дампита закрепляет svc_rqst сама структура (освобождается через kfree_rcu), но ничто не задерживает vfree буфера операций в течение льготного периода RCU. Параллельное соединение Таким образом, завершение может освободить буфер во время чтения дампа. это — использование после освобождения памяти vmalloc.

Повторная проверка конечного счетчика последовательностей (smp_load_acquire из rq_status_counter) не может отменить загрузку, которая уже отключена от освобожденной памяти. Исправьте это, заменив vfree(args->ops) на kvfree_rcu_mightsleep(), что откладывает бесплатное предоставление до истечения льготного периода RCU. Это делает существующего rcu_read_lock в дампе достаточно для защиты чтения.

Компромисс заключается в том, что завершенные буферы составных операций (до 200 * sizeof(struct nfsd4_op)) сохраняется в памяти немного дольше, в течение одного льготного периода, прежде чем они будут возвращены.

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

In the Linux kernel, the following vulnerability has been resolved: nfsd: defer vfree of compound ops to fix rpc_status UAF The rpc_status netlink dumpit walks every in-flight svc_rqst under rcu_read_lock and, for NFSv4 requests, reads opnums out of args->ops[]. But args->ops is a separate vmalloc buffer freed synchronously by vfree() in nfsd4_release_compoundargs() at the end of every compound. The dumpit's rcu_read_lock pins the svc_rqst struct itself (freed via kfree_rcu), but nothing defers the vfree of the ops buffer across the RCU grace period. A concurrent compound completion can therefore free the buffer while the dumpit is reading it — a use-after-free on vmalloc memory. The trailing seqcount recheck (smp_load_acquire of rq_status_counter) cannot undo a load that already retired against freed memory. Fix by replacing vfree(args->ops) with kvfree_rcu_mightsleep(), which defers the free until after an RCU grace period. This makes the existing rcu_read_lock in the dumpit sufficient to protect the read. The tradeoff is that completed compound ops buffers (up to 200 * sizeof(struct nfsd4_op)) persist in memory slightly longer, across one grace period, before being reclaimed.

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

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

Последствия

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

Строка CVSS v3.1