CVE-2026-89674 PUBLISHED

nfsd: fix XDR length calculation in nfsd4_ff_encode_layoutget

Assigner: Linux
Reserved: 11.09.2026 Published: 11.09.2026 Updated: 13.09.2026

In the Linux kernel, the following vulnerability has been resolved:

nfsd: fix XDR length calculation in nfsd4_ff_encode_layoutget

The XDR buffer size calculation in nfsd4_ff_encode_layoutget() has multiple errors that can result in either an out-of-bounds write or leaking uninitialized kernel memory to the client:

  • fh_len doesn't account for XDR padding on the file handle data
  • uid and gid lengths use "8 + len" but xdr_encode_opaque() actually writes "4 + xdr_align_size(len)" bytes
  • ds_len omits the flags and stats_collect_hint fields (8 bytes), while len's header constant overestimates by 8 bytes -- these partially cancel but leave a net mismatch

The worst case occurs with short strings (e.g. uid=0, gid=0 with an odd-sized file handle), where the function writes up to 5 bytes past the reserved XDR buffer. Conversely, when string lengths happen to be 4-byte aligned, the reservation is too large and stale buffer content is sent to the client.

Fix this by breaking out every encoded field explicitly in the ds_len calculation, using xdr_align_size() for all variable-length opaque fields, and correcting the header constants.

Metrics

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 9.8

AV:N - The bug is in nfsd's pNFS flexfile LAYOUTGET encoder (nfsd4_ff_encode_layoutget). A remote NFSv4.1 client reaches it over TCP/2049 via COMPOUND SEQUENCE, PUTFH, OPEN, and LAYOUTGET on the in-kernel NFS server. AC:L - A client that can OPEN a file on a flexfile pNFS export issues LAYOUTGET and hits the miscalculated xdr_reserve_space length. Root-owned files yield uid/gid "0", and PUTFH may append 1-3 bytes ignored by fh_verify so fh.size is odd; no race is required. PR:N - Typical nfsd deployments accept AUTH_SYS/AUTH_NULL without cryptographic authentication. Any host allowed by the export ACL can EXCHANGE_ID/CREATE_SESSION, PUTFH/OPEN, and LAYOUTGET; no local account on the NFS server is required. UI:N - The attacking NFS client drives the compounds that open a file and request a flexfile layout. No victim user action such as mounting a filesystem or opening a file on the server is required. S:U - The out-of-bounds write and kernel-memory leak occur in the NFS server host's XDR reply buffer. Impact stays in that kernel security authority and does not cross a VM, IOMMU, or sandbox boundary. C:H - When the reservation is too large, stale uninitialized kernel bytes in the RPC reply are sent to the client. The matching out-of-bounds write is kernel memory corruption that can be leveraged for information disclosure per CVSS kernel guidance. I:H - Worst case the encoder writes up to 5 bytes past the xdr_reserve_space region, including across a reply-page boundary into adjacent kernel memory. Kernel CNA guidance scores out-of-bounds writes as High integrity impact. A:H - A write past the current XDR page (xdr->end) into an unmapped or unrelated page oopses or panics nfsd. The attacker can pad prior COMPOUND ops to place the LAYOUTGET encode at a page boundary and repeat the request to deny service.

Product Status

Vendor Linux
Product Linux
Versions Default: unaffected
  • affected from 9b9960a0ca4773e21c4b153ed355583946346b25 to e7d9d23ecd9172f05b09bb678ff22db8e361c428 (excl.)
  • affected from 9b9960a0ca4773e21c4b153ed355583946346b25 to 0380129b1373c437eb35401a174671c8888f4b80 (excl.)
  • affected from 9b9960a0ca4773e21c4b153ed355583946346b25 to c81cef6a805dec266c10fc4f83c93d6fcf1a2b43 (excl.)
  • affected from 9b9960a0ca4773e21c4b153ed355583946346b25 to f9868174af49d207fbaf0c5e055d088a983684af (excl.)
Vendor Linux
Product Linux
Versions Default: affected
  • Version 4.8 is affected
  • unaffected from 0 to 4.8 (excl.)
  • unaffected from 6.12.109 to 6.12.* (incl.)
  • unaffected from 6.18.50 to 6.18.* (incl.)
  • unaffected from 7.2.4 to 7.2.* (incl.)
  • unaffected from 7.3-rc1 to * (incl.)

References