On Mon, Oct 23, 2017 at 02:40:34PM -0700, Eric Biggers wrote: > From: Eric Biggers <ebiggers@xxxxxxxxxx> > > There are going to be more filesystem encryption definitions added, and > we don't want to use a disproportionate amount of space in <linux/fs.h> > for filesystem encryption stuff. So move the fscrypt definitions to a > new header <linux/fscrypt.h>. > > For compatibility with existing userspace programs which may be > including <linux/fs.h>, <linux/fs.h> still includes the new header. > (It's debatable whether we really need this, though; the filesystem > encryption API is new enough that most if not all programs that are > using it have to declare it themselves anyway.) > > Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx> Reviewed-by: Michael Halcrow <mhalcrow@xxxxxxxxxx> > --- > include/linux/fscrypt.h | 2 +- > include/uapi/linux/fs.h | 50 +++-------------------------------------- > include/uapi/linux/fscrypt.h | 53 ++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 57 insertions(+), 48 deletions(-) > create mode 100644 include/uapi/linux/fscrypt.h > > diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h > index 53437bfdfcbc..f7aa7d62e235 100644 > --- a/include/linux/fscrypt.h > +++ b/include/linux/fscrypt.h > @@ -19,7 +19,7 @@ > #include <linux/bio.h> > #include <linux/dcache.h> > #include <crypto/skcipher.h> > -#include <uapi/linux/fs.h> > +#include <uapi/linux/fscrypt.h> > > #define FS_CRYPTO_BLOCK_SIZE 16 > > diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h > index 56235dddea7d..6ecd3ee9960c 100644 > --- a/include/uapi/linux/fs.h > +++ b/include/uapi/linux/fs.h > @@ -12,6 +12,9 @@ > #include <linux/limits.h> > #include <linux/ioctl.h> > #include <linux/types.h> > +#ifndef __KERNEL__ > +#include <linux/fscrypt.h> > +#endif > > /* > * It's silly to have NR_OPEN bigger than NR_FILE, but you can change > @@ -253,53 +256,6 @@ struct fsxattr { > #define FS_IOC_FSGETXATTR _IOR ('X', 31, struct fsxattr) > #define FS_IOC_FSSETXATTR _IOW ('X', 32, struct fsxattr) > > -/* > - * File system encryption support > - */ > -/* Policy provided via an ioctl on the topmost directory */ > -#define FS_KEY_DESCRIPTOR_SIZE 8 > - > -#define FS_POLICY_FLAGS_PAD_4 0x00 > -#define FS_POLICY_FLAGS_PAD_8 0x01 > -#define FS_POLICY_FLAGS_PAD_16 0x02 > -#define FS_POLICY_FLAGS_PAD_32 0x03 > -#define FS_POLICY_FLAGS_PAD_MASK 0x03 > -#define FS_POLICY_FLAGS_VALID 0x03 > - > -/* Encryption algorithms */ > -#define FS_ENCRYPTION_MODE_INVALID 0 > -#define FS_ENCRYPTION_MODE_AES_256_XTS 1 > -#define FS_ENCRYPTION_MODE_AES_256_GCM 2 > -#define FS_ENCRYPTION_MODE_AES_256_CBC 3 > -#define FS_ENCRYPTION_MODE_AES_256_CTS 4 > -#define FS_ENCRYPTION_MODE_AES_128_CBC 5 > -#define FS_ENCRYPTION_MODE_AES_128_CTS 6 > - > -struct fscrypt_policy { > - __u8 version; > - __u8 contents_encryption_mode; > - __u8 filenames_encryption_mode; > - __u8 flags; > - __u8 master_key_descriptor[FS_KEY_DESCRIPTOR_SIZE]; > -}; > - > -#define FS_IOC_SET_ENCRYPTION_POLICY _IOR('f', 19, struct fscrypt_policy) > -#define FS_IOC_GET_ENCRYPTION_PWSALT _IOW('f', 20, __u8[16]) > -#define FS_IOC_GET_ENCRYPTION_POLICY _IOW('f', 21, struct fscrypt_policy) > - > -/* Parameters for passing an encryption key into the kernel keyring */ > -#define FS_KEY_DESC_PREFIX "fscrypt:" > -#define FS_KEY_DESC_PREFIX_SIZE 8 > - > -/* Structure that userspace passes to the kernel keyring */ > -#define FS_MAX_KEY_SIZE 64 > - > -struct fscrypt_key { > - __u32 mode; > - __u8 raw[FS_MAX_KEY_SIZE]; > - __u32 size; > -}; > - > /* > * Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS) > * > diff --git a/include/uapi/linux/fscrypt.h b/include/uapi/linux/fscrypt.h > new file mode 100644 > index 000000000000..c09209fc42ea > --- /dev/null > +++ b/include/uapi/linux/fscrypt.h > @@ -0,0 +1,53 @@ > +#ifndef _UAPI_LINUX_FSCRYPT_H > +#define _UAPI_LINUX_FSCRYPT_H > + > +#include <linux/types.h> > + > +/* > + * File system encryption support > + */ > +/* Policy provided via an ioctl on the topmost directory */ > +#define FS_KEY_DESCRIPTOR_SIZE 8 > + > +#define FS_POLICY_FLAGS_PAD_4 0x00 > +#define FS_POLICY_FLAGS_PAD_8 0x01 > +#define FS_POLICY_FLAGS_PAD_16 0x02 > +#define FS_POLICY_FLAGS_PAD_32 0x03 > +#define FS_POLICY_FLAGS_PAD_MASK 0x03 > +#define FS_POLICY_FLAGS_VALID 0x03 > + > +/* Encryption algorithms */ > +#define FS_ENCRYPTION_MODE_INVALID 0 > +#define FS_ENCRYPTION_MODE_AES_256_XTS 1 > +#define FS_ENCRYPTION_MODE_AES_256_GCM 2 > +#define FS_ENCRYPTION_MODE_AES_256_CBC 3 > +#define FS_ENCRYPTION_MODE_AES_256_CTS 4 > +#define FS_ENCRYPTION_MODE_AES_128_CBC 5 > +#define FS_ENCRYPTION_MODE_AES_128_CTS 6 > + > +struct fscrypt_policy { > + __u8 version; > + __u8 contents_encryption_mode; > + __u8 filenames_encryption_mode; > + __u8 flags; > + __u8 master_key_descriptor[FS_KEY_DESCRIPTOR_SIZE]; > +}; > + > +#define FS_IOC_SET_ENCRYPTION_POLICY _IOR('f', 19, struct fscrypt_policy) > +#define FS_IOC_GET_ENCRYPTION_PWSALT _IOW('f', 20, __u8[16]) > +#define FS_IOC_GET_ENCRYPTION_POLICY _IOW('f', 21, struct fscrypt_policy) > + > +/* Parameters for passing an encryption key into the kernel keyring */ > +#define FS_KEY_DESC_PREFIX "fscrypt:" > +#define FS_KEY_DESC_PREFIX_SIZE 8 > + > +/* Structure that userspace passes to the kernel keyring */ > +#define FS_MAX_KEY_SIZE 64 > + > +struct fscrypt_key { > + __u32 mode; > + __u8 raw[FS_MAX_KEY_SIZE]; > + __u32 size; > +}; > + > +#endif /* _UAPI_LINUX_FSCRYPT_H */ > -- > 2.15.0.rc0.271.g36b669edcc-goog >