CVE-2026-89702 in Linux信息

摘要

由 VulDB • 2026-09-11

在 Linux 内核中,已修复以下漏洞:

nfsd: 根据 xpt_locallen 调整 fh_verify 服务器 sockaddr 槽的大小

nfsd_fh_verify 和 nfsd_fh_verify_err 跟踪点声明的服务器 sockaddr 槽大小基于 xpt_remotelen,但实际填充时使用的是来自 xpt_local 的数据以及 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); ... )

当 xpt_locallen 超过 xpt_remotelen 时,__assign_sockaddr 的 memcpy 操作会写入保留的 ring-buffer(环形缓冲区)槽位之外。在相反情况下(即 xpt_locallen < xpt_remotelen),该槽位过大,未写入的部分会将之前的 ring-buffer 内容泄露给跟踪消费者。

“越界写入”的情况可在 NFS/UDP 上触发。svc_xprt_set_remote() 仅从 svc_tcp_accept() (net/sunrpc/svcsock.c) 和 RDMA 连接路径调用;而用于 UDP 的 svc_create_socket() 仅调用 svc_xprt_set_local(),因此 xpt_remotelen 在传输实例(xprt)的生命周期内保持为 0。对于每个基于 NFSv2/v3-over-UDP 请求的 fh_verify 跟踪点,都会将 16 或 28 字节从 xpt_local 复制到大小为 0 字节的槽位中。

其他记录服务器地址的 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 保持一致,因此保持不变。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

来源

Might our Artificial Intelligence support you?

Check our Alexa App!