mbox series

[RFC,v3,00/16] ceph+fscrypt: context, filename and symlink support

Message ID 20200914191707.380444-1-jlayton@kernel.org (mailing list archive)
Headers show
Series ceph+fscrypt: context, filename and symlink support | expand

Message

Jeff Layton Sept. 14, 2020, 7:16 p.m. UTC
This is the third posting of the ceph+fscrypt integration work. This
just covers context handling, filename and symlink support.

The main changes since the last set are mainly to address Eric's review
comments. Hopefully this will be much closer to mergeable. Some highlights:

1/ rebase onto Eric's fscrypt-file-creation-v2 tag

2/ fscrypt_context_for_new_inode now takes a void * to hold the context

3/ make fscrypt_fname_disk_to_usr designate whether the returned name
   is a nokey name. This is necessary to close a potential race in
   readdir support

4/ fscrypt_base64_encode/decode remain in fs/crypto (not moved into lib/)

5/ test_dummy_encryption handling is moved into a separate patch, and
   several bugs fixed that resulted in context not being set up
   properly.

6/ symlink handling now works

Content encryption is the next step, but I want to get the fscache
rework done first. It would be nice if we were able to store encrypted
files in the cache, for instance.

This set has been tagged as "ceph-fscrypt-rfc.3" in my tree here:

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

Note that this is still quite preliminary, but my goal is to get a set
merged for v5.11.

Jeff Layton (16):
  vfs: export new_inode_pseudo
  fscrypt: export fscrypt_base64_encode and fscrypt_base64_decode
  fscrypt: export fscrypt_d_revalidate
  fscrypt: add fscrypt_context_for_new_inode
  fscrypt: make fscrypt_fname_disk_to_usr return whether result is nokey
    name
  ceph: add fscrypt ioctls
  ceph: crypto context handling for ceph
  ceph: implement -o test_dummy_encryption mount option
  ceph: preallocate inode for ops that may create one
  ceph: add routine to create context prior to RPC
  ceph: make ceph_msdc_build_path use ref-walk
  ceph: add encrypted fname handling to ceph_mdsc_build_path
  ceph: make d_revalidate call fscrypt revalidator for encrypted
    dentries
  ceph: add support to readdir for encrypted filenames
  ceph: add fscrypt support to ceph_fill_trace
  ceph: create symlinks with encrypted and base64-encoded targets

 fs/ceph/Makefile        |   1 +
 fs/ceph/crypto.c        | 156 ++++++++++++++++++++++++++++++
 fs/ceph/crypto.h        |  67 +++++++++++++
 fs/ceph/dir.c           | 141 ++++++++++++++++++++-------
 fs/ceph/file.c          |  56 +++++++----
 fs/ceph/inode.c         | 204 ++++++++++++++++++++++++++++++++++------
 fs/ceph/ioctl.c         |  25 +++++
 fs/ceph/mds_client.c    |  94 +++++++++++++-----
 fs/ceph/mds_client.h    |   1 +
 fs/ceph/super.c         |  73 +++++++++++++-
 fs/ceph/super.h         |  18 +++-
 fs/ceph/xattr.c         |  32 +++++++
 fs/crypto/fname.c       |  67 ++++++++++---
 fs/crypto/hooks.c       |   4 +-
 fs/crypto/policy.c      |  35 +++++--
 fs/ext4/dir.c           |   3 +-
 fs/ext4/namei.c         |   6 +-
 fs/f2fs/dir.c           |   3 +-
 fs/inode.c              |   1 +
 fs/ubifs/dir.c          |   4 +-
 include/linux/fscrypt.h |  10 +-
 21 files changed, 860 insertions(+), 141 deletions(-)
 create mode 100644 fs/ceph/crypto.c
 create mode 100644 fs/ceph/crypto.h

Comments

Eric Biggers Sept. 15, 2020, 2:13 a.m. UTC | #1
On Mon, Sep 14, 2020 at 03:16:51PM -0400, Jeff Layton wrote:
> This is the third posting of the ceph+fscrypt integration work. This
> just covers context handling, filename and symlink support.
> 
> The main changes since the last set are mainly to address Eric's review
> comments. Hopefully this will be much closer to mergeable. Some highlights:
> 
> 1/ rebase onto Eric's fscrypt-file-creation-v2 tag
> 
> 2/ fscrypt_context_for_new_inode now takes a void * to hold the context
> 
> 3/ make fscrypt_fname_disk_to_usr designate whether the returned name
>    is a nokey name. This is necessary to close a potential race in
>    readdir support
> 
> 4/ fscrypt_base64_encode/decode remain in fs/crypto (not moved into lib/)
> 
> 5/ test_dummy_encryption handling is moved into a separate patch, and
>    several bugs fixed that resulted in context not being set up
>    properly.
> 
> 6/ symlink handling now works
> 
> Content encryption is the next step, but I want to get the fscache
> rework done first. It would be nice if we were able to store encrypted
> files in the cache, for instance.
> 
> This set has been tagged as "ceph-fscrypt-rfc.3" in my tree here:
> 
>     https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git
> 
> Note that this is still quite preliminary, but my goal is to get a set
> merged for v5.11.

A few comments that didn't fit anywhere else:

I'm looking forward to contents encryption, as that's the most important part.

Is there any possibility that the fscrypt xfstests can be run on ceph?
See: https://www.kernel.org/doc/html/latest/filesystems/fscrypt.html#tests

In fs/ceph/Kconfig, CEPH_FS needs:

	select FS_ENCRYPTION_ALGS if FS_ENCRYPTION

There are compile errors when !CONFIG_FS_ENCRYPTION.

- Eric
Jeff Layton Sept. 15, 2020, 1:38 p.m. UTC | #2
On Mon, 2020-09-14 at 19:13 -0700, Eric Biggers wrote:
> On Mon, Sep 14, 2020 at 03:16:51PM -0400, Jeff Layton wrote:
> > This is the third posting of the ceph+fscrypt integration work. This
> > just covers context handling, filename and symlink support.
> > 
> > The main changes since the last set are mainly to address Eric's review
> > comments. Hopefully this will be much closer to mergeable. Some highlights:
> > 
> > 1/ rebase onto Eric's fscrypt-file-creation-v2 tag
> > 
> > 2/ fscrypt_context_for_new_inode now takes a void * to hold the context
> > 
> > 3/ make fscrypt_fname_disk_to_usr designate whether the returned name
> >    is a nokey name. This is necessary to close a potential race in
> >    readdir support
> > 
> > 4/ fscrypt_base64_encode/decode remain in fs/crypto (not moved into lib/)
> > 
> > 5/ test_dummy_encryption handling is moved into a separate patch, and
> >    several bugs fixed that resulted in context not being set up
> >    properly.
> > 
> > 6/ symlink handling now works
> > 
> > Content encryption is the next step, but I want to get the fscache
> > rework done first. It would be nice if we were able to store encrypted
> > files in the cache, for instance.
> > 
> > This set has been tagged as "ceph-fscrypt-rfc.3" in my tree here:
> > 
> >     https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git
> > 
> > Note that this is still quite preliminary, but my goal is to get a set
> > merged for v5.11.
> 
> A few comments that didn't fit anywhere else:
> 
> I'm looking forward to contents encryption, as that's the most important part.
> 

Me too, but I've got a fairly substantial rework of the buffered
writeback code queued up to handle some fscache changes. We'll probably
need to teach fscache how to deal with encrypted data, so I haven't
really started on that part yet.

> Is there any possibility that the fscrypt xfstests can be run on ceph?
> See: https://www.kernel.org/doc/html/latest/filesystems/fscrypt.html#tests
> 

I've been testing with the xfstests "quick" group as a sanity test, but
it doesn't have the fscrypt tests. I'll try them out soon.

> In fs/ceph/Kconfig, CEPH_FS needs:
> 
> 	select FS_ENCRYPTION_ALGS if FS_ENCRYPTION
> 
> There are compile errors when !CONFIG_FS_ENCRYPTION.
> 

Thanks. I should have added the caveat that this is still _very_ rough
and not at all ready for merge. I'll definitely fix up
the !CONFIG_FS_ENCRYPTION case before I send the next set.

Thanks for the detailed review so far. I'm working through your comments
now and should address most of them in the next set.