[<prev] [next>] [day] [month] [year] [list]
Message-ID: <2025090449-CVE-2025-38691-8a2e@gregkh>
Date: Thu, 4 Sep 2025 17:32:56 +0200
From: Greg Kroah-Hartman <gregkh@...uxfoundation.org>
To: linux-cve-announce@...r.kernel.org
Cc: Greg Kroah-Hartman <gregkh@...nel.org>
Subject: CVE-2025-38691: pNFS: Fix uninited ptr deref in block/scsi layout
From: Greg Kroah-Hartman <gregkh@...nel.org>
Description
===========
In the Linux kernel, the following vulnerability has been resolved:
pNFS: Fix uninited ptr deref in block/scsi layout
The error occurs on the third attempt to encode extents. When function
ext_tree_prepare_commit() reallocates a larger buffer to retry encoding
extents, the "layoutupdate_pages" page array is initialized only after the
retry loop. But ext_tree_free_commitdata() is called on every iteration
and tries to put pages in the array, thus dereferencing uninitialized
pointers.
An additional problem is that there is no limit on the maximum possible
buffer_size. When there are too many extents, the client may create a
layoutcommit that is larger than the maximum possible RPC size accepted
by the server.
During testing, we observed two typical scenarios. First, one memory page
for extents is enough when we work with small files, append data to the
end of the file, or preallocate extents before writing. But when we fill
a new large file without preallocating, the number of extents can be huge,
and counting the number of written extents in ext_tree_encode_commit()
does not help much. Since this number increases even more between
unlocking and locking of ext_tree, the reallocated buffer may not be
large enough again and again.
The Linux kernel CVE team has assigned CVE-2025-38691 to this issue.
Affected and fixed versions
===========================
Fixed in 5.4.297 with commit 579b85f893d9885162e1cabf99a4a088916e143e
Fixed in 5.10.241 with commit 2896f101110076ac6bf99d7aaf463d61e26f89dd
Fixed in 5.15.190 with commit 4f783333cbfa2ee7d4aa8e47f6bd1b3f77534fcf
Fixed in 6.1.149 with commit 9be5c04beca3202d0a5f09fb4b2ecb644caa0bc5
Fixed in 6.6.103 with commit 24334f3cf8a294f253071b5bf22d754dbb6d0f2d
Fixed in 6.12.43 with commit f0b2eee3fbba9b7e3746ef698424ef5e4a197776
Fixed in 6.15.11 with commit 94ec6d939031a616474376dadbf4a8d0ef8b0bcc
Fixed in 6.16.2 with commit 37c3443a2685528f972d910a6fb87716b96fef46
Fixed in 6.17-rc1 with commit 9768797c219326699778fba9cd3b607b2f1e7950
Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.
Unaffected versions might change over time as fixes are backported to
older supported kernel versions. The official CVE entry at
https://cve.org/CVERecord/?id=CVE-2025-38691
will be updated if fixes are backported, please check that for the most
up to date information about this issue.
Affected files
==============
The file(s) affected by this issue are:
fs/nfs/blocklayout/extent_tree.c
Mitigation
==========
The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes. Individual
changes are never tested alone, but rather are part of a larger kernel
release. Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all. If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
https://git.kernel.org/stable/c/579b85f893d9885162e1cabf99a4a088916e143e
https://git.kernel.org/stable/c/2896f101110076ac6bf99d7aaf463d61e26f89dd
https://git.kernel.org/stable/c/4f783333cbfa2ee7d4aa8e47f6bd1b3f77534fcf
https://git.kernel.org/stable/c/9be5c04beca3202d0a5f09fb4b2ecb644caa0bc5
https://git.kernel.org/stable/c/24334f3cf8a294f253071b5bf22d754dbb6d0f2d
https://git.kernel.org/stable/c/f0b2eee3fbba9b7e3746ef698424ef5e4a197776
https://git.kernel.org/stable/c/94ec6d939031a616474376dadbf4a8d0ef8b0bcc
https://git.kernel.org/stable/c/37c3443a2685528f972d910a6fb87716b96fef46
https://git.kernel.org/stable/c/9768797c219326699778fba9cd3b607b2f1e7950
Powered by blists - more mailing lists