Ad

CVE-2026-89702

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

В ядре Linux устранена следующая уязвимость: nfsd: размер слота sockaddr сервера fh_verify от xpt_locallen Точки трассировки nfsd_fh_verify и nfsd_fh_verify_err объявляют слот sockaddr сервера размером xpt_remotelen, но заполните его из xpt_local с использованием xpt_locallen: TP_STRUCT__entry( ... __sockaddr(сервер, rqstp->rq_xprt->xpt_remotelen) ... ) TP_fast_assign( ... __assign_sockaddr(сервер, &rqstp->rq_xprt->xpt_local, rqstp->rq_xprt->xpt_locallen); ... ) Когда xpt_locallen превышает xpt_remotelen, memcpy __assign_sockaddr записывает за зарезервированный слот кольцевого буфера. В обратном направлении (xpt_locallen < xpt_remotelen) размер слота слишком велик, и ненаписанный хвост пропускает предварительное содержимое кольцевого буфера для отслеживания потребителей. Случай завершения записи доступен в NFS/UDP. svc_xprt_set_remote() вызывается только из svc_tcp_accept() (net/sunrpc/svcsock.c) и из путь подключения RDMA; svc_create_socket() только для вызовов UDP svc_xprt_set_local(), поэтому xpt_remotelen остается равным 0 для xprt. жизнь.

Каждая трассировка fh_verify для запроса NFSv2/v3-over-UDP. затем копирует 16 или 28 байт из xpt_local в нулевой слот. Другие точки трассировки NFSD, записывающие адрес сервера. (NFSD_TRACE_PROC_CALL_FIELDS, NFSD_TRACE_PROC_RES_FIELDS, SVC_RQST_ENDPOINT_FIELDS) уже размер слота сервера на xpt_locallen; nfsd_fh_verify и nfsd_fh_verify_err были единственными исключения. Исправьте это, изменив размер слота сервера с помощью xpt_locallen, чтобы объявленный слот соответствует длине копии.

Клиентский слот и его назначение уже соглашаемся на xpt_remotelen и остаемся нетронутыми.

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

In the Linux kernel, the following vulnerability has been resolved: nfsd: size fh_verify server sockaddr slot by xpt_locallen The nfsd_fh_verify and nfsd_fh_verify_err tracepoints declare the server sockaddr slot sized by xpt_remotelen but fill it from xpt_local using xpt_locallen: TP_STRUCT__entry( ... __sockaddr(server, rqstp->rq_xprt->xpt_remotelen) ... ) TP_fast_assign( ... __assign_sockaddr(server, &rqstp->rq_xprt->xpt_local, rqstp->rq_xprt->xpt_locallen); ... ) When xpt_locallen exceeds xpt_remotelen, __assign_sockaddr's memcpy writes past the reserved ring-buffer slot. In the reverse direction (xpt_locallen < xpt_remotelen) the slot is oversized and the unwritten tail leaks prior ring-buffer contents to trace consumers. The write-past-end case is reachable on NFS/UDP. svc_xprt_set_remote() is only called from svc_tcp_accept() (net/sunrpc/svcsock.c) and from the RDMA connect path; svc_create_socket() for UDP calls only svc_xprt_set_local(), so xpt_remotelen stays 0 for the xprt's lifetime. Every fh_verify trace for an NFSv2/v3-over-UDP request then copies 16 or 28 bytes from xpt_local into a zero-byte slot. The other NFSD tracepoints that record the server address (NFSD_TRACE_PROC_CALL_FIELDS, NFSD_TRACE_PROC_RES_FIELDS, SVC_RQST_ENDPOINT_FIELDS) already size the server slot by xpt_locallen; nfsd_fh_verify and nfsd_fh_verify_err were the only exceptions. Fix by sizing the server slot with xpt_locallen so the declared slot matches the copy length. The client slot and its assignment already agree on xpt_remotelen and are left untouched.

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

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

Последствия

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

Строка CVSS v3.1