mbox series

[v4,0/5] Improve simple directory offset wrap behavior

Message ID 20241204155257.1110338-1-cel@kernel.org (mailing list archive)
Headers show
Series Improve simple directory offset wrap behavior | expand

Message

Chuck Lever Dec. 4, 2024, 3:52 p.m. UTC
From: Chuck Lever <chuck.lever@oracle.com>

The purpose of this series is to construct a set of upstream fixes
that can be backported to v6.6 to address CVE-2024-46701.

My original plan was to add a cursor dentry. However, I've found a
solution that does not need one. In fact, most or all of the
reported issues are gone with 4/5. Thus I'm not sure 5/5 is
necessary, but it seems like a robust improvement.

Changes since v3:
- Series is no longer RFC
- Series passes xfstests locally and via NFS export
- Patch 2/5 was replaced; it now removes simple_offset_empty()
- 4/5 and 5/5 were rewritten based on test results
- Patch descriptions have been clarified

This series (still against v6.12) has been pushed to:

https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git/log/?h=tmpfs-fixes

Next step is to try backporting these to v6.6 to see if anything
else is needed.

Chuck Lever (5):
  libfs: Return ENOSPC when the directory offset range is exhausted
  Revert "libfs: Add simple_offset_empty()"
  Revert "libfs: fix infinite directory reads for offset dir"
  libfs: Replace simple_offset end-of-directory detection
  libfs: Use d_children list to iterate simple_offset directories

 fs/libfs.c         | 158 ++++++++++++++++++++++-----------------------
 include/linux/fs.h |   1 -
 mm/shmem.c         |   4 +-
 3 files changed, 81 insertions(+), 82 deletions(-)

Comments

Christian Brauner Dec. 5, 2024, 5:09 p.m. UTC | #1
On Wed, 04 Dec 2024 10:52:51 -0500, cel@kernel.org wrote:
> From: Chuck Lever <chuck.lever@oracle.com>
> 
> The purpose of this series is to construct a set of upstream fixes
> that can be backported to v6.6 to address CVE-2024-46701.
> 
> My original plan was to add a cursor dentry. However, I've found a
> solution that does not need one. In fact, most or all of the
> reported issues are gone with 4/5. Thus I'm not sure 5/5 is
> necessary, but it seems like a robust improvement.
> 
> [...]

Applied to the vfs-6.14.misc branch of the vfs/vfs.git tree.
Patches in the vfs-6.14.misc branch should appear in linux-next soon.

Please report any outstanding bugs that were missed during review in a
new review to the original patch series allowing us to drop it.

It's encouraged to provide Acked-bys and Reviewed-bys even though the
patch has now been applied. If possible patch trailers will be updated.

Note that commit hashes shown below are subject to change due to rebase,
trailer updates or similar. If in doubt, please check the listed branch.

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs.git
branch: vfs-6.14.misc

[1/5] libfs: Return ENOSPC when the directory offset range is exhausted
      https://git.kernel.org/vfs/vfs/c/3569cc5260ac
[2/5] Revert "libfs: Add simple_offset_empty()"
      https://git.kernel.org/vfs/vfs/c/06ed2dfc3234
[3/5] Revert "libfs: fix infinite directory reads for offset dir"
      https://git.kernel.org/vfs/vfs/c/29bc7ff8920d
[4/5] libfs: Replace simple_offset end-of-directory detection
      https://git.kernel.org/vfs/vfs/c/d4849629a4b7
[5/5] libfs: Use d_children list to iterate simple_offset directories
      https://git.kernel.org/vfs/vfs/c/5ba9a91ae23f
Chuck Lever Dec. 5, 2024, 10:16 p.m. UTC | #2
On 12/4/24 10:52 AM, cel@kernel.org wrote:
> From: Chuck Lever <chuck.lever@oracle.com>
> 
> The purpose of this series is to construct a set of upstream fixes
> that can be backported to v6.6 to address CVE-2024-46701.
> 
> My original plan was to add a cursor dentry. However, I've found a
> solution that does not need one. In fact, most or all of the
> reported issues are gone with 4/5. Thus I'm not sure 5/5 is
> necessary, but it seems like a robust improvement.
> 
> Changes since v3:
> - Series is no longer RFC
> - Series passes xfstests locally and via NFS export
> - Patch 2/5 was replaced; it now removes simple_offset_empty()
> - 4/5 and 5/5 were rewritten based on test results
> - Patch descriptions have been clarified
> 
> This series (still against v6.12) has been pushed to:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git/log/?h=tmpfs-fixes
> 
> Next step is to try backporting these to v6.6 to see if anything
> else is needed.
> 
> Chuck Lever (5):
>    libfs: Return ENOSPC when the directory offset range is exhausted
>    Revert "libfs: Add simple_offset_empty()"
>    Revert "libfs: fix infinite directory reads for offset dir"
>    libfs: Replace simple_offset end-of-directory detection
>    libfs: Use d_children list to iterate simple_offset directories
> 
>   fs/libfs.c         | 158 ++++++++++++++++++++++-----------------------
>   include/linux/fs.h |   1 -
>   mm/shmem.c         |   4 +-
>   3 files changed, 81 insertions(+), 82 deletions(-)
> 

I've backported these, as a proof of concept, to origin/linux-6.6.y. You
can find that here:

https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git/log/?h=nfsd-6.6.y

This series passes xfstests, including generic/736.

It would be a little cleaner if I could also backport da549bdd15c2
("dentry: switch the lists of children to hlist"), but that has similar
risks as backporting the Maple tree patches.