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

Jeff Layton
2020-09-14T19:19:01Z

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

--
2.26.2