fs, fscrypt: move uapi definitions to new header <linux/fscrypt.h>
More fscrypt definitions are being added, and we shouldn't use a disproportionate amount of space in <linux/fs.h> for fscrypt stuff. So move the fscrypt definitions to a new header <linux/fscrypt.h>. For source compatibility with existing userspace programs, <linux/fs.h> still includes the new header. Reviewed-by: Theodore Ts'o <tytso@mit.edu> Signed-off-by: Eric Biggers <ebiggers@google.com>
This commit is contained in:
parent
29a98c1caf
commit
7af0ab0d3a
@ -6603,6 +6603,7 @@ T: git git://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git
|
|||||||
S: Supported
|
S: Supported
|
||||||
F: fs/crypto/
|
F: fs/crypto/
|
||||||
F: include/linux/fscrypt*.h
|
F: include/linux/fscrypt*.h
|
||||||
|
F: include/uapi/linux/fscrypt.h
|
||||||
F: Documentation/filesystems/fscrypt.rst
|
F: Documentation/filesystems/fscrypt.rst
|
||||||
|
|
||||||
FSI SUBSYSTEM
|
FSI SUBSYSTEM
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/fs.h>
|
#include <linux/fs.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
|
#include <uapi/linux/fscrypt.h>
|
||||||
|
|
||||||
#define FS_CRYPTO_BLOCK_SIZE 16
|
#define FS_CRYPTO_BLOCK_SIZE 16
|
||||||
|
|
||||||
|
@ -13,6 +13,9 @@
|
|||||||
#include <linux/limits.h>
|
#include <linux/limits.h>
|
||||||
#include <linux/ioctl.h>
|
#include <linux/ioctl.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#ifndef __KERNEL__
|
||||||
|
#include <linux/fscrypt.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Use of MS_* flags within the kernel is restricted to core mount(2) code. */
|
/* Use of MS_* flags within the kernel is restricted to core mount(2) code. */
|
||||||
#if !defined(__KERNEL__)
|
#if !defined(__KERNEL__)
|
||||||
@ -212,57 +215,6 @@ struct fsxattr {
|
|||||||
#define FS_IOC_GETFSLABEL _IOR(0x94, 49, char[FSLABEL_MAX])
|
#define FS_IOC_GETFSLABEL _IOR(0x94, 49, char[FSLABEL_MAX])
|
||||||
#define FS_IOC_SETFSLABEL _IOW(0x94, 50, char[FSLABEL_MAX])
|
#define FS_IOC_SETFSLABEL _IOW(0x94, 50, char[FSLABEL_MAX])
|
||||||
|
|
||||||
/*
|
|
||||||
* 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_FLAG_DIRECT_KEY 0x04 /* use master key directly */
|
|
||||||
#define FS_POLICY_FLAGS_VALID 0x07
|
|
||||||
|
|
||||||
/* 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
|
|
||||||
#define FS_ENCRYPTION_MODE_SPECK128_256_XTS 7 /* Removed, do not use. */
|
|
||||||
#define FS_ENCRYPTION_MODE_SPECK128_256_CTS 8 /* Removed, do not use. */
|
|
||||||
#define FS_ENCRYPTION_MODE_ADIANTUM 9
|
|
||||||
|
|
||||||
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)
|
* Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
|
||||||
*
|
*
|
||||||
|
61
include/uapi/linux/fscrypt.h
Normal file
61
include/uapi/linux/fscrypt.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
||||||
|
/*
|
||||||
|
* fscrypt user API
|
||||||
|
*
|
||||||
|
* These ioctls can be used on filesystems that support fscrypt. See the
|
||||||
|
* "User API" section of Documentation/filesystems/fscrypt.rst.
|
||||||
|
*/
|
||||||
|
#ifndef _UAPI_LINUX_FSCRYPT_H
|
||||||
|
#define _UAPI_LINUX_FSCRYPT_H
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#define FS_KEY_DESCRIPTOR_SIZE 8
|
||||||
|
|
||||||
|
/* Encryption policy flags */
|
||||||
|
#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_FLAG_DIRECT_KEY 0x04 /* use master key directly */
|
||||||
|
#define FS_POLICY_FLAGS_VALID 0x07
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
#define FS_ENCRYPTION_MODE_SPECK128_256_XTS 7 /* Removed, do not use. */
|
||||||
|
#define FS_ENCRYPTION_MODE_SPECK128_256_CTS 8 /* Removed, do not use. */
|
||||||
|
#define FS_ENCRYPTION_MODE_ADIANTUM 9
|
||||||
|
|
||||||
|
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 */
|
Loading…
Reference in New Issue
Block a user