CVE-2026-89702 in Linux
Tóm tắt
Bởi VulDB • 11/09/2026
Trong kernel Linux, các lỗ hổng sau đây đã được khắc phục:
nfsd: điều chỉnh kích thước khe sockaddr server trong fh_verify theo xpt_locallen
Các tracepoint nfsd_fh_verify và nfsd_fh_verify_err khai báo khe sockaddr của máy chủ có kích thước dựa trên xpt_remotelen nhưng lại điền dữ liệu vào đó từ xpt_local sử dụng 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); ... )
Khi xpt_locallen vượt quá xpt_remotelen, hàm memcpy của __assign_sockaddr sẽ ghi dữ liệu ra ngoài khe ring-buffer đã được phân bổ. Trong trường hợp ngược lại (xpt_locallen < xpt_remotelen), khe bị phình to và phần đuôi không được ghi nội dung có thể làm rò rỉ các nội dung cũ của ring-buffer cho người tiêu dùng tracepoint.
Trường hợp ghi dữ liệu vượt quá giới hạn có thể xảy ra trên NFS/UDP. Hàm svc_xprt_set_remote() chỉ được gọi từ svc_tcp_accept() (net/sunrpc/svcsock.c) và từ đường dẫn kết nối RDMA; hàm svc_create_socket() cho UDP chỉ gọi svc_xprt_set_local(), do đó xpt_remotelen vẫn bằng 0 trong suốt vòng đời của xprt. Mọi tracepoint fh_verify đối với yêu cầu NFSv2/v3 qua UDP sau đó sẽ sao chép 16 hoặc 28 byte từ xpt_local vào một khe có kích thước 0 byte.
Các tracepoint NFSD khác ghi lại địa chỉ máy chủ (NFSD_TRACE_PROC_CALL_FIELDS, NFSD_TRACE_PROC_RES_FIELDS, SVC_RQST_ENDPOINT_FIELDS) đã sử dụng xpt_locallen để xác định kích thước khe server; nfsd_fh_verify và nfsd_fh_verify_err là các trường hợp ngoại lệ duy nhất.
Khắc phục bằng cách điều chỉnh kích thước khe server theo xpt_locallen để khe được khai báo khớp với độ dài sao chép. Khe client và việc gán giá trị của nó đã đồng ý về xpt_remotelen nên không bị thay đổi.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.