| From: |
| Andrey Albershteyn <aalbersh-AT-redhat.com> |
| To: |
| fsverity-AT-lists.linux.dev, linux-xfs-AT-vger.kernel.org, ebiggers-AT-kernel.org, linux-fsdevel-AT-vger.kernel.org, aalbersh-AT-kernel.org, aalbersh-AT-redhat.com, djwong-AT-kernel.org |
| Subject: |
| [PATCH v2 0/23] fs-verity support for XFS with post EOF merkle tree |
| Date: |
| Mon, 12 Jan 2026 15:49:44 +0100 |
| Message-ID: |
| <cover.1768229271.patch-series@thinky> |
| Cc: |
| djwong-AT-kernel.org, david-AT-fromorbit.com, hch-AT-lst.de |
| Archive-link: |
| Article |
Hi all,
This patch series adds fs-verity support for XFS. This version stores
merkle tree beyond end of the file, the same way as ext4 does it. The
verity descriptor is stored at the tail of the merkle tree.
The patchset starts with a few fs-verity preparation patches. Then, a few
patches to allow iomap to work in post EOF region. The XFS fs-verity
implementation follows.
Preallocations. The preallocations are disabled for fs-verity files. If
inode is fs-verity one the allocation size is set to zero. This is fine
as the only writing happening is merkle tree data and descriptor. It
would be nice to allocate tree size on first write, this could be
improved in the future.
The tree is read by iomap into page cache at offset 1 << 53. This is far
enough to handle any supported file size.
Testing. The -g verity is passing for 1k, 8k and 4k with/without quota,
the tests include different merkle tree block size.
Feedback is welcomed :)
xfsprogs:
https://github.com/alberand/xfsprogs/tree/b4/fsverity
xfstests:
https://github.com/alberand/xfstests/tree/b4/fsverity
Cc: fsverity@lists.linux.dev
Cc: linux-fsdevel@vger.kernel.org
Cc: linux-xfs@vger.kernel.org
Cc: david@fromorbit.com
Cc: djwong@kernel.org
Cc: ebiggers@kernel.org
Cc: hch@lst.de
Andrey Albershteyn <aalbersh@kernel.org>:
fsverity: expose ensure_fsverity_info()
iomap: introduce IOMAP_F_BEYOND_EOF
iomap: allow iomap_file_buffered_write() take iocb without file
iomap: integrate fs-verity verification into iomap's read path
xfs: add fs-verity ro-compat flag
xfs: add inode on-disk VERITY flag
xfs: initialize fs-verity on file open and cleanup on inode destruction
xfs: don't allow to enable DAX on fs-verity sealed inode
xfs: disable direct read path for fs-verity files
xfs: add verity info pointer to xfs inode
xfs: introduce XFS_FSVERITY_CONSTRUCTION inode flag
xfs: introduce XFS_FSVERITY_REGION_START constant
xfs: disable preallocations for fsverity Merkle tree writes
xfs: add writeback and iomap reading of Merkle tree pages
xfs: add fs-verity support
xfs: add fs-verity ioctls
xfs: add fsverity traces
xfs: enable ro-compat fs-verity flag
Darrick J. Wong <djwong@kernel.org>:
fsverity: report validation errors back to the filesystem
xfs: advertise fs-verity being available on filesystem
xfs: check and repair the verity inode flag state
xfs: report verity failures through the health system
Diffstat:
fs/iomap/bio.c | 66 +++++++++++++++++++++++++---
fs/iomap/buffered-io.c | 31 ++++++++++---
fs/iomap/ioend.c | 41 ++++++++++++++++-
fs/iomap/trace.h | 3 +-
fs/verity/open.c | 4 +-
fs/verity/verify.c | 4 +
fs/xfs/Makefile | 1 +
fs/xfs/libxfs/xfs_format.h | 13 +++--
fs/xfs/libxfs/xfs_fs.h | 24 ++++++++++
fs/xfs/libxfs/xfs_health.h | 4 +-
fs/xfs/libxfs/xfs_inode_buf.c | 8 +++
fs/xfs/libxfs/xfs_inode_util.c | 2 +
fs/xfs/libxfs/xfs_sb.c | 4 +
fs/xfs/scrub/attr.c | 7 +++
fs/xfs/scrub/common.c | 53 +++++++++++++++++++++++
fs/xfs/scrub/common.h | 2 +
fs/xfs/scrub/inode.c | 7 +++
fs/xfs/scrub/inode_repair.c | 36 +++++++++++++++
fs/xfs/xfs_aops.c | 20 +++++++-
fs/xfs/xfs_bmap_util.c | 7 +++
fs/xfs/xfs_file.c | 23 ++++++++--
fs/xfs/xfs_fsverity.c | 395 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
fs/xfs/xfs_fsverity.h | 12 +++++
fs/xfs/xfs_health.c | 1 +
fs/xfs/xfs_icache.c | 3 +
fs/xfs/xfs_inode.h | 11 ++++
fs/xfs/xfs_ioctl.c | 16 +++++++
fs/xfs/xfs_iomap.c | 28 ++++++++++--
fs/xfs/xfs_iops.c | 4 +
fs/xfs/xfs_message.c | 4 +
fs/xfs/xfs_message.h | 1 +
fs/xfs/xfs_mount.h | 2 +
fs/xfs/xfs_super.c | 16 +++++++
fs/xfs/xfs_trace.h | 46 ++++++++++++++++++++
include/linux/fsverity.h | 16 +++++++
include/linux/iomap.h | 16 +++++++
include/trace/events/fsverity.h | 19 ++++++++
37 files changed, 924 insertions(+), 26 deletions(-)
--
- Andrey