В ядре Linux устранена следующая уязвимость:
sunrpc: отложить rq_argp и rq_resp до окончания льготного периода RCU.
svc_rqst_free() освобождает rqstp->rq_argp и rqstp->rq_resp синхронно
через kfree(), но освобождает структуру rqstp через kfree_rcu(). После
svc_exit_thread() вызывает list_del_rcu() и svc_rqst_free(), есть
окно, в котором читатели RCU, начавшиеся до list_del_rcu(), все еще могут
просмотрите список потоков и найдите файл rqstp. Эти читатели (напр.
nfsd_nl_rpc_status_get_dumpit()) разыменовывает rqstp->rq_argp, который имеет
уже освобождено — использование после освобождения.
Исправьте это, переместив kfree из rq_argp и rq_resp в явный
Обратный вызов call_rcu() вместе со структурой free. Ресурсы, к которым нет доступа
читателями RCU (bvec, буферные страницы, рабочий фолио, auth_data) остаются
синхронно освобожден.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: sunrpc: defer rq_argp and rq_resp free until after RCU grace period svc_rqst_free() frees rqstp->rq_argp and rqstp->rq_resp synchronously via kfree(), but defers the rqstp struct free via kfree_rcu(). After svc_exit_thread() calls list_del_rcu() and svc_rqst_free(), there is a window where RCU readers that started before list_del_rcu() can still traverse the thread list and find the rqstp. These readers (e.g. nfsd_nl_rpc_status_get_dumpit()) dereference rqstp->rq_argp, which has already been freed — a use-after-free. Fix this by moving the kfree of rq_argp and rq_resp into an explicit call_rcu() callback alongside the struct free. Resources not accessed by RCU readers (bvec, buffer pages, scratch folio, auth_data) remain synchronously freed.
Характеристики атаки
Последствия
Строка CVSS v3.1