linux-integrity.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/12] fs-verity: read-only file-based authenticity protection
@ 2018-11-01 22:52 Eric Biggers
  2018-11-01 22:52 ` [PATCH v2 01/12] fs-verity: add a documentation file Eric Biggers
                   ` (11 more replies)
  0 siblings, 12 replies; 52+ messages in thread
From: Eric Biggers @ 2018-11-01 22:52 UTC (permalink / raw)
  To: linux-fscrypt
  Cc: linux-fsdevel, linux-ext4, linux-f2fs-devel, linux-integrity,
	linux-kernel, Theodore Y . Ts'o, Jaegeuk Kim, Victor Hsieh,
	Chandan Rajendra

Hello,

This patchset implements fs-verity for ext4 and f2fs.  fs-verity is
similar to dm-verity, but implemented on a per-file basis: a Merkle tree
is used to measure (hash) the file's data as it is paged in.  ext4 and
f2fs hide this Merkle tree beyond the end of the file, though other
filesystems might implement it differently in the future.  In general,
fs-verity is intended for use on writable filesystems; dm-verity is
still recommended on read-only ones.

Similar to fscrypt, most of the code is in fs/verity/, and not too many
filesystem-specific changes are needed.  The Merkle tree is written by
userspace before calling an ioctl to mark the file as a verity file; the
file then becomes read-only and the verity metadata is hidden or moved.

fs-verity provides a file measurement (hash) in constant time and
verifies data on-demand.  Thus, it is useful for efficiently verifying
the authenticity of large files of which only a small portion may be
accessed, such as Android application package (APK) files.  It may also
be useful in "audit" use cases where file hashes are logged.

fs-verity also provides better protection against malicious disks than
an ahead-of-time hash, since fs-verity re-verifies data each time it's
paged in.  Note, however, that any authenticity guarantee is still
dependent on verification of the file measurement and other relevant
metadata in a way that makes sense for the overall system; fs-verity is
only a tool to help with this.

This patchset doesn't yet include IMA support for fs-verity file
measurements.  This is planned and we'd like to collaborate with the IMA
maintainers.  Although fs-verity can be used on its own without IMA,
fs-verity is primarily a lower level feature (think of it as a way of
hashing a file), so some users may still need IMA's policy mechanism.
However, an optional in-kernel signature verification mechanism within
fs-verity itself is also included.

This patchset is based on Linus' tree as of today (commit 7c6c54b505b8a).
It can also be found in git at tag "fsverity_2018-11-01" of:

	https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git

fs-verity has a userspace utility:

	https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/fsverity-utils.git

xfstests for fs-verity can be found at branch "fsverity" of:

	https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/xfstests-dev.git

fs-verity is supported by e2fsprogs v1.44.4-2+ and f2fs-tools v1.11.0+.

Please see the documentation file Documentation/filesystems/fsverity.rst
(added by patch 1) for details; this cover letter only gave an overview.
Examples of setting up fs-verity protected files can also be found in
the README file of fsverity-utils.

Other useful references include:

    - LWN coverage of v1 patchset: https://lwn.net/Articles/763729/

    - Presentation at Linux Security Summit North America 2018:
        - Slides: https://schd.ws/hosted_files/lssna18/af/fs-verity%20slide%20deck.pdf
        - Video: https://www.youtube.com/watch?v=Aw5h6aBhu6M

    - Notes from discussion at LSFMM 2018: https://lwn.net/Articles/752614/

Changes since v1:

- Added documentation file.
- Require write permission for FS_IOC_ENABLE_VERITY, rather than
  CAP_SYS_ADMIN.
- Eliminated dependency on CONFIG_BLOCK and clarified that filesystems
  can verify a page at a time rather than a bio at a time.
- Fixed conditions for verifying holes.
- ext4 now only allows fs-verity on extent-based files.
- Eliminated most of the assumptions that the verity metadata is stored
  beyond EOF, in case filesystems want to do things differently.
- Other cleanups.

Eric Biggers (12):
  fs-verity: add a documentation file
  fs-verity: add setup code, UAPI, and Kconfig
  fs-verity: add MAINTAINERS file entry
  fs-verity: add data verification hooks for ->readpages()
  fs-verity: implement FS_IOC_ENABLE_VERITY ioctl
  fs-verity: implement FS_IOC_MEASURE_VERITY ioctl
  fs-verity: add SHA-512 support
  fs-verity: add CRC-32C support
  fs-verity: support builtin file signatures
  ext4: add basic fs-verity support
  ext4: add fs-verity read support
  f2fs: fs-verity support

 Documentation/filesystems/fsverity.rst | 583 ++++++++++++++++
 Documentation/filesystems/index.rst    |  11 +
 Documentation/ioctl/ioctl-number.txt   |   1 +
 MAINTAINERS                            |  11 +
 fs/Kconfig                             |   2 +
 fs/Makefile                            |   1 +
 fs/ext4/Kconfig                        |  20 +
 fs/ext4/ext4.h                         |  22 +-
 fs/ext4/file.c                         |   6 +
 fs/ext4/inode.c                        |  11 +
 fs/ext4/ioctl.c                        |  12 +
 fs/ext4/readpage.c                     | 209 +++++-
 fs/ext4/super.c                        | 100 ++-
 fs/ext4/sysfs.c                        |   6 +
 fs/f2fs/Kconfig                        |  20 +
 fs/f2fs/data.c                         |  43 +-
 fs/f2fs/f2fs.h                         |  17 +-
 fs/f2fs/file.c                         |  58 ++
 fs/f2fs/inode.c                        |   3 +-
 fs/f2fs/super.c                        |  30 +
 fs/f2fs/sysfs.c                        |  11 +
 fs/verity/Kconfig                      |  52 ++
 fs/verity/Makefile                     |   5 +
 fs/verity/fsverity_private.h           | 135 ++++
 fs/verity/hash_algs.c                  | 115 ++++
 fs/verity/ioctl.c                      | 164 +++++
 fs/verity/setup.c                      | 908 +++++++++++++++++++++++++
 fs/verity/signature.c                  | 187 +++++
 fs/verity/verify.c                     | 298 ++++++++
 include/linux/fs.h                     |   9 +
 include/linux/fsverity.h               | 112 +++
 include/uapi/linux/fsverity.h          |  98 +++
 32 files changed, 3218 insertions(+), 42 deletions(-)
 create mode 100644 Documentation/filesystems/fsverity.rst
 create mode 100644 fs/verity/Kconfig
 create mode 100644 fs/verity/Makefile
 create mode 100644 fs/verity/fsverity_private.h
 create mode 100644 fs/verity/hash_algs.c
 create mode 100644 fs/verity/ioctl.c
 create mode 100644 fs/verity/setup.c
 create mode 100644 fs/verity/signature.c
 create mode 100644 fs/verity/verify.c
 create mode 100644 include/linux/fsverity.h
 create mode 100644 include/uapi/linux/fsverity.h

-- 
2.19.1.568.g152ad8e336-goog


^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2019-01-04 20:41 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-11-01 22:52 [PATCH v2 00/12] fs-verity: read-only file-based authenticity protection Eric Biggers
2018-11-01 22:52 ` [PATCH v2 01/12] fs-verity: add a documentation file Eric Biggers
2018-12-12  9:14   ` Christoph Hellwig
2018-12-12 20:26     ` Eric Biggers
2018-12-13 20:22       ` Christoph Hellwig
2018-12-14  4:48         ` Eric Biggers
2018-12-17 16:49           ` Christoph Hellwig
2018-12-17 18:32             ` Eric Biggers
2018-12-19  7:09               ` Christoph Hellwig
2018-12-17 20:00           ` Darrick J. Wong
2018-12-19  0:16             ` Theodore Y. Ts'o
2018-12-19  2:19               ` Dave Chinner
2018-12-19 19:30                 ` Theodore Y. Ts'o
2018-12-19 21:35                   ` Dave Chinner
2018-12-20 22:01                     ` Theodore Y. Ts'o
2018-12-21  7:04                       ` Christoph Hellwig
2018-12-21 10:06                         ` Richard Weinberger
2018-12-21 15:47                         ` Theodore Y. Ts'o
2018-12-21 15:53                           ` Matthew Wilcox
2018-12-21 16:28                             ` Theodore Y. Ts'o
2018-12-21 16:34                               ` Matthew Wilcox
2018-12-21 19:13                           ` Linus Torvalds
2018-12-22  4:17                             ` Theodore Y. Ts'o
2018-12-22 22:47                               ` Linus Torvalds
2018-12-23  4:34                                 ` Theodore Y. Ts'o
2018-12-23  4:10                               ` Matthew Wilcox
2018-12-23  4:45                                 ` Theodore Y. Ts'o
2019-01-04 20:41                                   ` Daniel Colascione
2018-12-19  7:14               ` Christoph Hellwig
2018-12-19  7:11             ` Christoph Hellwig
     [not found]               ` <CAHk-=wiB8vGbje+NgNkMZupHsZ_cqg6YEBV+ZXSF4wnywFLRHQ@mail.gmail.com>
2018-12-19  7:19                 ` Christoph Hellwig
2018-12-14  5:17         ` Theodore Y. Ts'o
2018-12-14  5:39           ` Eric Biggers
2018-12-17 16:52           ` Christoph Hellwig
2018-12-17 19:15             ` Eric Biggers
2018-12-21 16:11   ` Matthew Wilcox
2018-11-01 22:52 ` [PATCH v2 02/12] fs-verity: add setup code, UAPI, and Kconfig Eric Biggers
2018-11-01 22:52 ` [PATCH v2 03/12] fs-verity: add MAINTAINERS file entry Eric Biggers
2018-11-01 22:52 ` [PATCH v2 04/12] fs-verity: add data verification hooks for ->readpages() Eric Biggers
2018-11-01 22:52 ` [PATCH v2 05/12] fs-verity: implement FS_IOC_ENABLE_VERITY ioctl Eric Biggers
2018-11-01 22:52 ` [PATCH v2 06/12] fs-verity: implement FS_IOC_MEASURE_VERITY ioctl Eric Biggers
2018-11-01 22:52 ` [PATCH v2 07/12] fs-verity: add SHA-512 support Eric Biggers
2018-11-01 22:52 ` [PATCH v2 08/12] fs-verity: add CRC-32C support Eric Biggers
2018-11-01 22:52 ` [PATCH v2 09/12] fs-verity: support builtin file signatures Eric Biggers
2018-11-01 22:52 ` [PATCH v2 10/12] ext4: add basic fs-verity support Eric Biggers
2018-11-02  9:43   ` Chandan Rajendra
2018-11-06  1:25     ` Eric Biggers
2018-11-06  6:52       ` Chandan Rajendra
2018-11-05 21:05   ` Andreas Dilger
2018-11-06  1:11     ` Eric Biggers
2018-11-01 22:52 ` [PATCH v2 11/12] ext4: add fs-verity read support Eric Biggers
2018-11-01 22:52 ` [PATCH v2 12/12] f2fs: fs-verity support Eric Biggers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).