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