From: Andrey Albershteyn <aalbersh@redhat.com>
To: linux-xfs@vger.kernel.org, linux-fsdevel@vger.kernel.org,
fsverity@lists.linux.dev
Cc: djwong@kernel.org, ebiggers@kernel.org, david@fromorbit.com,
dchinner@redhat.com, Andrey Albershteyn <aalbersh@redhat.com>
Subject: [PATCH v3 00/28] fs-verity support for XFS
Date: Fri, 6 Oct 2023 20:48:54 +0200 [thread overview]
Message-ID: <20231006184922.252188-1-aalbersh@redhat.com> (raw)
Hi all,
Quite a long time passed by from v2 but this is v3 of fs-verity
support in XFS.
This patchset introduces fs-verity [6] support in XFS. This
implementation uses extended attributes to store fs-verity
metadata. The Merkle tree blocks are stored in the remote extended
attributes. The names are offsets into the tree.
A few key points of this patchset:
- fs-verity works with Merkle tree blocks instead of PAGE references
from filesystem
- Filesystem can supply bio_set and submit_io() to iomap for read
path
- In XFS, fs-verity metadata is stored in extended attributes
- Verification happens in iomap's read IO path (offloaded to
workqueue)
- New global XFS workqueue for verification processing
- Direct path and DAX are disabled for inodes with fs-verity
- Inodes with fs-verity have new on-disk diflag
- xfs_attr_get() can return a buffer with an extended attribute
- Each extended attribute has exactly one Merkle tree block
- xfs_buf with Merkle tree block allocates double memory and has
duplicate of the extended attribute data with leaf headers and
without
- xfs_buf tracks verified status of merkle tree block
The patchset consist of five parts:
- [1..4]: Patches from Parent Pointer patchset which add binary
xattr names with a few deps
- [5]: Patch which adds FS_XFLAG_VERITY to make verity exposed as
extended attribute flag
- [9..10]: Improvements to core fs-verity - mainly switch to blocks
management instead of pages
- [11..12]: Allow filesystem to provide submit_io() and bio_set in
read path
- [12..28]: Integration of fs-verity to xfs
Testing:
The patchset is tested with xfstests -g all (with exceptions) on
xfs_1k, xfs_4k, xfs_1k_quota, xfs_4k_quota, ext4_4k, and
ext4_4k_quota. With KMEMLEAK and KASAN enabled. Also, xfs_1k and
xfs_4k on a 64k pages.
Changes from V2:
- FS_XFLAG_VERITY extended attribute flag
- Change fs-verity to use Merkle tree blocks instead of expecting
PAGE references from filesystem
- Change approach in iomap to filesystem provided bio_set and
submit_io instead of just callouts to filesystem
- Add possibility for xfs_buf allocate more space for fs-verity
extended attributes
- Make xfs_attr module to copy fs-verity blocks inside the xfs_buf,
so XFS can get data without leaf headers
- Add Merkle tree removal for error path
- Makae scrub aware of new dinode flag
Changes from V1:
- Added parent pointer patches for easier testing
- Many issues and refactoring points fixed from the V1 review
- Adjusted for recent changes in fs-verity core (folios, non-4k)
- Dropped disabling of large folios
- Completely new fsverity patches (fix, callout, log_blocksize)
- Change approach to verification in iomap to the same one as in
write path. Callouts to fs instead of direct fs-verity use.
- New XFS workqueue for post read folio verification
- xfs_attr_get() can return underlying xfs_buf
- xfs_bufs are marked with XBF_VERITY_CHECKED to track verified
blocks
kernel:
[1]: https://github.com/alberand/linux/tree/fsverity-v3
xfsprogs:
[2]: https://github.com/alberand/xfsprogs/tree/fsverity-v3
xfstests:
[3]: https://github.com/alberand/xfstests/tree/fsverity-v3
v1:
[4]: https://lore.kernel.org/linux-xfs/20221213172935.680971-1-aalbersh@redhat.com/
v2:
[5]: https://lore.kernel.org/linux-xfs/20230404145319.2057051-1-aalbersh@redhat.com/
fs-verity:
[6]: https://www.kernel.org/doc/html/latest/filesystems/fsverity.html
Thanks,
Andrey
Allison Henderson (4):
xfs: Add new name to attri/d
xfs: add parent pointer support to attribute code
xfs: define parent pointer xattr format
xfs: Add xfs_verify_pptr
Andrey Albershteyn (24):
fs: add FS_XFLAG_VERITY for fs-verity sealed inodes
fsverity: add drop_page() callout
fsverity: always use bitmap to track verified status
fsverity: pass Merkle tree block size to ->read_merkle_tree_page()
fsverity: pass log_blocksize to end_enable_verity()
fsverity: operate with Merkle tree blocks instead of pages
iomap: pass readpage operation to read path
iomap: allow filesystem to implement read path verification
xfs: add XBF_VERITY_CHECKED xfs_buf flag
xfs: add XFS_DA_OP_BUFFER to make xfs_attr_get() return buffer
xfs: introduce workqueue for post read IO work
xfs: add bio_set and submit_io for ioend post-processing
xfs: add attribute type for fs-verity
xfs: make xfs_buf_get() to take XBF_* flags
xfs: add XBF_DOUBLE_ALLOC to increase size of the buffer
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 sealsed inode
xfs: disable direct read path for fs-verity sealed files
xfs: add fs-verity support
xfs: make scrub aware of verity dinode flag
xfs: add fs-verity ioctls
xfs: enable ro-compat fs-verity flag
Documentation/filesystems/fsverity.rst | 9 +
fs/btrfs/verity.c | 7 +-
fs/erofs/data.c | 4 +-
fs/ext4/verity.c | 6 +-
fs/f2fs/verity.c | 6 +-
fs/gfs2/aops.c | 4 +-
fs/ioctl.c | 4 +
fs/iomap/buffered-io.c | 53 ++++-
fs/verity/enable.c | 6 +-
fs/verity/fsverity_private.h | 1 -
fs/verity/open.c | 64 +++---
fs/verity/read_metadata.c | 40 ++--
fs/verity/verify.c | 126 +++---------
fs/xfs/Makefile | 1 +
fs/xfs/libxfs/xfs_attr.c | 81 +++++++-
fs/xfs/libxfs/xfs_attr.h | 7 +-
fs/xfs/libxfs/xfs_attr_leaf.c | 24 ++-
fs/xfs/libxfs/xfs_attr_remote.c | 40 +++-
fs/xfs/libxfs/xfs_da_btree.h | 7 +-
fs/xfs/libxfs/xfs_da_format.h | 62 +++++-
fs/xfs/libxfs/xfs_format.h | 14 +-
fs/xfs/libxfs/xfs_log_format.h | 8 +-
fs/xfs/libxfs/xfs_sb.c | 4 +-
fs/xfs/scrub/attr.c | 4 +-
fs/xfs/xfs_aops.c | 84 +++++++-
fs/xfs/xfs_aops.h | 2 +
fs/xfs/xfs_attr_item.c | 142 +++++++++++---
fs/xfs/xfs_attr_item.h | 1 +
fs/xfs/xfs_attr_list.c | 17 +-
fs/xfs/xfs_buf.c | 7 +-
fs/xfs/xfs_buf.h | 21 +-
fs/xfs/xfs_file.c | 22 ++-
fs/xfs/xfs_inode.c | 2 +
fs/xfs/xfs_inode.h | 3 +-
fs/xfs/xfs_ioctl.c | 22 +++
fs/xfs/xfs_iomap.c | 3 +
fs/xfs/xfs_iops.c | 4 +
fs/xfs/xfs_linux.h | 1 +
fs/xfs/xfs_mount.h | 3 +
fs/xfs/xfs_ondisk.h | 4 +
fs/xfs/xfs_super.c | 28 ++-
fs/xfs/xfs_trace.h | 1 +
fs/xfs/xfs_verity.c | 257 +++++++++++++++++++++++++
fs/xfs/xfs_verity.h | 37 ++++
fs/xfs/xfs_xattr.c | 9 +
fs/zonefs/file.c | 4 +-
include/linux/fsverity.h | 129 ++++++++++++-
include/linux/iomap.h | 36 +++-
include/uapi/linux/fs.h | 1 +
49 files changed, 1170 insertions(+), 252 deletions(-)
create mode 100644 fs/xfs/xfs_verity.c
create mode 100644 fs/xfs/xfs_verity.h
--
2.40.1
next reply other threads:[~2023-10-06 18:52 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-06 18:48 Andrey Albershteyn [this message]
2023-10-06 18:48 ` [PATCH v3 01/28] xfs: Add new name to attri/d Andrey Albershteyn
2023-10-06 18:48 ` [PATCH v3 02/28] xfs: add parent pointer support to attribute code Andrey Albershteyn
2023-10-06 18:48 ` [PATCH v3 03/28] xfs: define parent pointer xattr format Andrey Albershteyn
2023-10-06 18:48 ` [PATCH v3 04/28] xfs: Add xfs_verify_pptr Andrey Albershteyn
2023-10-11 1:01 ` Darrick J. Wong
2023-10-11 11:09 ` Andrey Albershteyn
2023-10-06 18:48 ` [PATCH v3 05/28] fs: add FS_XFLAG_VERITY for fs-verity sealed inodes Andrey Albershteyn
2023-10-11 4:05 ` Eric Biggers
2023-10-11 11:06 ` Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 06/28] fsverity: add drop_page() callout Andrey Albershteyn
2023-10-11 3:06 ` Eric Biggers
2023-10-11 11:11 ` Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 07/28] fsverity: always use bitmap to track verified status Andrey Albershteyn
2023-10-11 3:15 ` Eric Biggers
2023-10-11 13:03 ` Andrey Albershteyn
2023-10-12 7:27 ` Eric Biggers
2023-10-13 3:12 ` Darrick J. Wong
2023-10-17 4:58 ` Eric Biggers
2023-10-18 2:35 ` Darrick J. Wong
2023-10-17 6:01 ` Christoph Hellwig
2023-10-16 11:52 ` Andrey Albershteyn
2023-10-17 5:57 ` Christoph Hellwig
2023-10-17 17:49 ` Eric Biggers
2023-10-06 18:49 ` [PATCH v3 08/28] fsverity: pass Merkle tree block size to ->read_merkle_tree_page() Andrey Albershteyn
2023-10-11 3:17 ` Eric Biggers
2023-10-11 11:13 ` Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 09/28] fsverity: pass log_blocksize to end_enable_verity() Andrey Albershteyn
2023-10-11 3:19 ` Eric Biggers
2023-10-11 11:17 ` Andrey Albershteyn
2023-10-12 7:34 ` Eric Biggers
2023-10-06 18:49 ` [PATCH v3 10/28] fsverity: operate with Merkle tree blocks instead of pages Andrey Albershteyn
2023-10-07 4:02 ` kernel test robot
2023-10-11 3:56 ` Eric Biggers
2023-10-16 13:00 ` Christoph Hellwig
2023-10-06 18:49 ` [PATCH v3 11/28] iomap: pass readpage operation to read path Andrey Albershteyn
2023-10-11 18:31 ` Darrick J. Wong
2023-10-16 12:35 ` Andrey Albershteyn
2023-10-16 9:15 ` Christoph Hellwig
2023-10-16 12:32 ` Andrey Albershteyn
2023-10-16 12:58 ` Christoph Hellwig
2023-10-06 18:49 ` [PATCH v3 12/28] iomap: allow filesystem to implement read path verification Andrey Albershteyn
2023-10-11 18:39 ` Darrick J. Wong
2023-10-06 18:49 ` [PATCH v3 13/28] xfs: add XBF_VERITY_CHECKED xfs_buf flag Andrey Albershteyn
2023-10-11 18:54 ` Darrick J. Wong
2023-10-06 18:49 ` [PATCH v3 14/28] xfs: add XFS_DA_OP_BUFFER to make xfs_attr_get() return buffer Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 15/28] xfs: introduce workqueue for post read IO work Andrey Albershteyn
2023-10-11 18:55 ` Darrick J. Wong
2023-10-16 12:37 ` Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 16/28] xfs: add bio_set and submit_io for ioend post-processing Andrey Albershteyn
2023-10-11 18:47 ` Darrick J. Wong
2023-10-06 18:49 ` [PATCH v3 17/28] xfs: add attribute type for fs-verity Andrey Albershteyn
2023-10-11 18:48 ` Darrick J. Wong
2023-10-06 18:49 ` [PATCH v3 18/28] xfs: make xfs_buf_get() to take XBF_* flags Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 19/28] xfs: add XBF_DOUBLE_ALLOC to increase size of the buffer Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 20/28] xfs: add fs-verity ro-compat flag Andrey Albershteyn
2023-10-11 18:56 ` Darrick J. Wong
2023-10-06 18:49 ` [PATCH v3 21/28] xfs: add inode on-disk VERITY flag Andrey Albershteyn
2023-10-11 18:57 ` Darrick J. Wong
2023-10-06 18:49 ` [PATCH v3 22/28] xfs: initialize fs-verity on file open and cleanup on inode destruction Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 23/28] xfs: don't allow to enable DAX on fs-verity sealsed inode Andrey Albershteyn
2023-10-11 19:00 ` Darrick J. Wong
2023-10-06 18:49 ` [PATCH v3 24/28] xfs: disable direct read path for fs-verity sealed files Andrey Albershteyn
2023-10-11 19:02 ` Darrick J. Wong
2023-10-06 18:49 ` [PATCH v3 25/28] xfs: add fs-verity support Andrey Albershteyn
2023-10-06 23:40 ` kernel test robot
2023-10-11 1:39 ` Darrick J. Wong
2023-10-11 14:36 ` Andrey Albershteyn
2023-10-18 19:18 ` kernel test robot
2023-10-06 18:49 ` [PATCH v3 26/28] xfs: make scrub aware of verity dinode flag Andrey Albershteyn
2023-10-11 1:06 ` Darrick J. Wong
2023-10-11 14:37 ` Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 27/28] xfs: add fs-verity ioctls Andrey Albershteyn
2023-10-06 18:49 ` [PATCH v3 28/28] xfs: enable ro-compat fs-verity flag Andrey Albershteyn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231006184922.252188-1-aalbersh@redhat.com \
--to=aalbersh@redhat.com \
--cc=david@fromorbit.com \
--cc=dchinner@redhat.com \
--cc=djwong@kernel.org \
--cc=ebiggers@kernel.org \
--cc=fsverity@lists.linux.dev \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.