1 /* SPDX-License-Identifier: GPL-2.0 */
3 * fscrypt.h: declarations for per-file encryption
5 * Filesystems that implement per-file encryption must include this header
8 * Copyright (C) 2015, Google, Inc.
10 * Written by Michael Halcrow, 2015.
11 * Modified by Jaegeuk Kim, 2015.
13 #ifndef _LINUX_FSCRYPT_H
14 #define _LINUX_FSCRYPT_H
18 #include <linux/slab.h>
19 #include <uapi/linux/fscrypt.h>
22 * The lengths of all file contents blocks must be divisible by this value.
23 * This is needed to ensure that all contents encryption modes will work, as
24 * some of the supported modes don't support arbitrarily byte-aligned messages.
26 * Since the needed alignment is 16 bytes, most filesystems will meet this
27 * requirement naturally, as typical block sizes are powers of 2. However, if a
28 * filesystem can generate arbitrarily byte-aligned block lengths (e.g., via
29 * compression), then it will need to pad to this alignment before encryption.
31 #define FSCRYPT_CONTENTS_ALIGNMENT 16
34 struct fscrypt_inode_info
;
44 const struct qstr
*usr_fname
;
45 struct fscrypt_str disk_name
;
48 struct fscrypt_str crypto_buf
;
52 #define FSTR_INIT(n, l) { .name = n, .len = l }
53 #define FSTR_TO_QSTR(f) QSTR_INIT((f)->name, (f)->len)
54 #define fname_name(p) ((p)->disk_name.name)
55 #define fname_len(p) ((p)->disk_name.len)
57 /* Maximum value for the third parameter of fscrypt_operations.set_context(). */
58 #define FSCRYPT_SET_CONTEXT_MAX_SIZE 40
60 #ifdef CONFIG_FS_ENCRYPTION
62 /* Crypto operations for filesystems */
63 struct fscrypt_operations
{
66 * If set, then fs/crypto/ will allocate a global bounce page pool the
67 * first time an encryption key is set up for a file. The bounce page
68 * pool is required by the following functions:
70 * - fscrypt_encrypt_pagecache_blocks()
71 * - fscrypt_zeroout_range() for files not using inline crypto
73 * If the filesystem doesn't use those, it doesn't need to set this.
75 unsigned int needs_bounce_pages
: 1;
78 * If set, then fs/crypto/ will allow the use of encryption settings
79 * that assume inode numbers fit in 32 bits (i.e.
80 * FSCRYPT_POLICY_FLAG_IV_INO_LBLK_{32,64}), provided that the other
81 * prerequisites for these settings are also met. This is only useful
82 * if the filesystem wants to support inline encryption hardware that is
83 * limited to 32-bit or 64-bit data unit numbers and where programming
84 * keyslots is very slow.
86 unsigned int has_32bit_inodes
: 1;
89 * If set, then fs/crypto/ will allow users to select a crypto data unit
90 * size that is less than the filesystem block size. This is done via
91 * the log2_data_unit_size field of the fscrypt policy. This flag is
92 * not compatible with filesystems that encrypt variable-length blocks
93 * (i.e. blocks that aren't all equal to filesystem's block size), for
94 * example as a result of compression. It's also not compatible with
95 * the fscrypt_encrypt_block_inplace() and
96 * fscrypt_decrypt_block_inplace() functions.
98 unsigned int supports_subblock_data_units
: 1;
101 * This field exists only for backwards compatibility reasons and should
102 * only be set by the filesystems that are setting it already. It
103 * contains the filesystem-specific key description prefix that is
104 * accepted for "logon" keys for v1 fscrypt policies. This
105 * functionality is deprecated in favor of the generic prefix
106 * "fscrypt:", which itself is deprecated in favor of the filesystem
107 * keyring ioctls such as FS_IOC_ADD_ENCRYPTION_KEY. Filesystems that
108 * are newly adding fscrypt support should not set this field.
110 const char *legacy_key_prefix
;
113 * Get the fscrypt context of the given inode.
115 * @inode: the inode whose context to get
116 * @ctx: the buffer into which to get the context
117 * @len: length of the @ctx buffer in bytes
119 * Return: On success, returns the length of the context in bytes; this
120 * may be less than @len. On failure, returns -ENODATA if the
121 * inode doesn't have a context, -ERANGE if the context is
122 * longer than @len, or another -errno code.
124 int (*get_context
)(struct inode
*inode
, void *ctx
, size_t len
);
127 * Set an fscrypt context on the given inode.
129 * @inode: the inode whose context to set. The inode won't already have
130 * an fscrypt context.
131 * @ctx: the context to set
132 * @len: length of @ctx in bytes (at most FSCRYPT_SET_CONTEXT_MAX_SIZE)
133 * @fs_data: If called from fscrypt_set_context(), this will be the
134 * value the filesystem passed to fscrypt_set_context().
135 * Otherwise (i.e. when called from
136 * FS_IOC_SET_ENCRYPTION_POLICY) this will be NULL.
138 * i_rwsem will be held for write.
140 * Return: 0 on success, -errno on failure.
142 int (*set_context
)(struct inode
*inode
, const void *ctx
, size_t len
,
146 * Get the dummy fscrypt policy in use on the filesystem (if any).
148 * Filesystems only need to implement this function if they support the
149 * test_dummy_encryption mount option.
151 * Return: A pointer to the dummy fscrypt policy, if the filesystem is
152 * mounted with test_dummy_encryption; otherwise NULL.
154 const union fscrypt_policy
*(*get_dummy_policy
)(struct super_block
*sb
);
157 * Check whether a directory is empty. i_rwsem will be held for write.
159 bool (*empty_dir
)(struct inode
*inode
);
162 * Check whether the filesystem's inode numbers and UUID are stable,
163 * meaning that they will never be changed even by offline operations
164 * such as filesystem shrinking and therefore can be used in the
165 * encryption without the possibility of files becoming unreadable.
167 * Filesystems only need to implement this function if they want to
168 * support the FSCRYPT_POLICY_FLAG_IV_INO_LBLK_{32,64} flags. These
169 * flags are designed to work around the limitations of UFS and eMMC
170 * inline crypto hardware, and they shouldn't be used in scenarios where
171 * such hardware isn't being used.
173 * Leaving this NULL is equivalent to always returning false.
175 bool (*has_stable_inodes
)(struct super_block
*sb
);
178 * Return an array of pointers to the block devices to which the
179 * filesystem may write encrypted file contents, NULL if the filesystem
180 * only has a single such block device, or an ERR_PTR() on error.
182 * On successful non-NULL return, *num_devs is set to the number of
183 * devices in the returned array. The caller must free the returned
184 * array using kfree().
186 * If the filesystem can use multiple block devices (other than block
187 * devices that aren't used for encrypted file contents, such as
188 * external journal devices), and wants to support inline encryption,
189 * then it must implement this function. Otherwise it's not needed.
191 struct block_device
**(*get_devices
)(struct super_block
*sb
,
192 unsigned int *num_devs
);
195 int fscrypt_d_revalidate(struct dentry
*dentry
, unsigned int flags
);
197 static inline struct fscrypt_inode_info
*
198 fscrypt_get_inode_info(const struct inode
*inode
)
201 * Pairs with the cmpxchg_release() in fscrypt_setup_encryption_info().
202 * I.e., another task may publish ->i_crypt_info concurrently, executing
203 * a RELEASE barrier. We need to use smp_load_acquire() here to safely
204 * ACQUIRE the memory the other task published.
206 return smp_load_acquire(&inode
->i_crypt_info
);
210 * fscrypt_needs_contents_encryption() - check whether an inode needs
211 * contents encryption
212 * @inode: the inode to check
214 * Return: %true iff the inode is an encrypted regular file and the kernel was
215 * built with fscrypt support.
217 * If you need to know whether the encrypt bit is set even when the kernel was
218 * built without fscrypt support, you must use IS_ENCRYPTED() directly instead.
220 static inline bool fscrypt_needs_contents_encryption(const struct inode
*inode
)
222 return IS_ENCRYPTED(inode
) && S_ISREG(inode
->i_mode
);
226 * When d_splice_alias() moves a directory's no-key alias to its
227 * plaintext alias as a result of the encryption key being added,
228 * DCACHE_NOKEY_NAME must be cleared and there might be an opportunity
229 * to disable d_revalidate. Note that we don't have to support the
230 * inverse operation because fscrypt doesn't allow no-key names to be
231 * the source or target of a rename().
233 static inline void fscrypt_handle_d_move(struct dentry
*dentry
)
236 * VFS calls fscrypt_handle_d_move even for non-fscrypt
239 if (dentry
->d_flags
& DCACHE_NOKEY_NAME
) {
240 dentry
->d_flags
&= ~DCACHE_NOKEY_NAME
;
243 * Other filesystem features might be handling dentry
244 * revalidation, in which case it cannot be disabled.
246 if (dentry
->d_op
->d_revalidate
== fscrypt_d_revalidate
)
247 dentry
->d_flags
&= ~DCACHE_OP_REVALIDATE
;
252 * fscrypt_is_nokey_name() - test whether a dentry is a no-key name
253 * @dentry: the dentry to check
255 * This returns true if the dentry is a no-key dentry. A no-key dentry is a
256 * dentry that was created in an encrypted directory that hasn't had its
257 * encryption key added yet. Such dentries may be either positive or negative.
259 * When a filesystem is asked to create a new filename in an encrypted directory
260 * and the new filename's dentry is a no-key dentry, it must fail the operation
261 * with ENOKEY. This includes ->create(), ->mkdir(), ->mknod(), ->symlink(),
262 * ->rename(), and ->link(). (However, ->rename() and ->link() are already
263 * handled by fscrypt_prepare_rename() and fscrypt_prepare_link().)
265 * This is necessary because creating a filename requires the directory's
266 * encryption key, but just checking for the key on the directory inode during
267 * the final filesystem operation doesn't guarantee that the key was available
268 * during the preceding dentry lookup. And the key must have already been
269 * available during the dentry lookup in order for it to have been checked
270 * whether the filename already exists in the directory and for the new file's
271 * dentry not to be invalidated due to it incorrectly having the no-key flag.
273 * Return: %true if the dentry is a no-key name
275 static inline bool fscrypt_is_nokey_name(const struct dentry
*dentry
)
277 return dentry
->d_flags
& DCACHE_NOKEY_NAME
;
280 static inline void fscrypt_prepare_dentry(struct dentry
*dentry
,
284 * This code tries to only take ->d_lock when necessary to write
285 * to ->d_flags. We shouldn't be peeking on d_flags for
286 * DCACHE_OP_REVALIDATE unlocked, but in the unlikely case
287 * there is a race, the worst it can happen is that we fail to
288 * unset DCACHE_OP_REVALIDATE and pay the cost of an extra
292 spin_lock(&dentry
->d_lock
);
293 dentry
->d_flags
|= DCACHE_NOKEY_NAME
;
294 spin_unlock(&dentry
->d_lock
);
295 } else if (dentry
->d_flags
& DCACHE_OP_REVALIDATE
&&
296 dentry
->d_op
->d_revalidate
== fscrypt_d_revalidate
) {
298 * Unencrypted dentries and encrypted dentries where the
299 * key is available are always valid from fscrypt
300 * perspective. Avoid the cost of calling
301 * fscrypt_d_revalidate unnecessarily.
303 spin_lock(&dentry
->d_lock
);
304 dentry
->d_flags
&= ~DCACHE_OP_REVALIDATE
;
305 spin_unlock(&dentry
->d_lock
);
310 void fscrypt_enqueue_decrypt_work(struct work_struct
*);
312 struct page
*fscrypt_encrypt_pagecache_blocks(struct page
*page
,
316 int fscrypt_encrypt_block_inplace(const struct inode
*inode
, struct page
*page
,
317 unsigned int len
, unsigned int offs
,
318 u64 lblk_num
, gfp_t gfp_flags
);
320 int fscrypt_decrypt_pagecache_blocks(struct folio
*folio
, size_t len
,
322 int fscrypt_decrypt_block_inplace(const struct inode
*inode
, struct page
*page
,
323 unsigned int len
, unsigned int offs
,
326 static inline bool fscrypt_is_bounce_page(struct page
*page
)
328 return page
->mapping
== NULL
;
331 static inline struct page
*fscrypt_pagecache_page(struct page
*bounce_page
)
333 return (struct page
*)page_private(bounce_page
);
336 static inline bool fscrypt_is_bounce_folio(struct folio
*folio
)
338 return folio
->mapping
== NULL
;
341 static inline struct folio
*fscrypt_pagecache_folio(struct folio
*bounce_folio
)
343 return bounce_folio
->private;
346 void fscrypt_free_bounce_page(struct page
*bounce_page
);
349 int fscrypt_ioctl_set_policy(struct file
*filp
, const void __user
*arg
);
350 int fscrypt_ioctl_get_policy(struct file
*filp
, void __user
*arg
);
351 int fscrypt_ioctl_get_policy_ex(struct file
*filp
, void __user
*arg
);
352 int fscrypt_ioctl_get_nonce(struct file
*filp
, void __user
*arg
);
353 int fscrypt_has_permitted_context(struct inode
*parent
, struct inode
*child
);
354 int fscrypt_context_for_new_inode(void *ctx
, struct inode
*inode
);
355 int fscrypt_set_context(struct inode
*inode
, void *fs_data
);
357 struct fscrypt_dummy_policy
{
358 const union fscrypt_policy
*policy
;
361 int fscrypt_parse_test_dummy_encryption(const struct fs_parameter
*param
,
362 struct fscrypt_dummy_policy
*dummy_policy
);
363 bool fscrypt_dummy_policies_equal(const struct fscrypt_dummy_policy
*p1
,
364 const struct fscrypt_dummy_policy
*p2
);
365 void fscrypt_show_test_dummy_encryption(struct seq_file
*seq
, char sep
,
366 struct super_block
*sb
);
368 fscrypt_is_dummy_policy_set(const struct fscrypt_dummy_policy
*dummy_policy
)
370 return dummy_policy
->policy
!= NULL
;
373 fscrypt_free_dummy_policy(struct fscrypt_dummy_policy
*dummy_policy
)
375 kfree(dummy_policy
->policy
);
376 dummy_policy
->policy
= NULL
;
380 void fscrypt_destroy_keyring(struct super_block
*sb
);
381 int fscrypt_ioctl_add_key(struct file
*filp
, void __user
*arg
);
382 int fscrypt_ioctl_remove_key(struct file
*filp
, void __user
*arg
);
383 int fscrypt_ioctl_remove_key_all_users(struct file
*filp
, void __user
*arg
);
384 int fscrypt_ioctl_get_key_status(struct file
*filp
, void __user
*arg
);
387 int fscrypt_prepare_new_inode(struct inode
*dir
, struct inode
*inode
,
389 void fscrypt_put_encryption_info(struct inode
*inode
);
390 void fscrypt_free_inode(struct inode
*inode
);
391 int fscrypt_drop_inode(struct inode
*inode
);
394 int fscrypt_fname_encrypt(const struct inode
*inode
, const struct qstr
*iname
,
395 u8
*out
, unsigned int olen
);
396 bool fscrypt_fname_encrypted_size(const struct inode
*inode
, u32 orig_len
,
397 u32 max_len
, u32
*encrypted_len_ret
);
398 int fscrypt_setup_filename(struct inode
*inode
, const struct qstr
*iname
,
399 int lookup
, struct fscrypt_name
*fname
);
401 static inline void fscrypt_free_filename(struct fscrypt_name
*fname
)
403 kfree(fname
->crypto_buf
.name
);
406 int fscrypt_fname_alloc_buffer(u32 max_encrypted_len
,
407 struct fscrypt_str
*crypto_str
);
408 void fscrypt_fname_free_buffer(struct fscrypt_str
*crypto_str
);
409 int fscrypt_fname_disk_to_usr(const struct inode
*inode
,
410 u32 hash
, u32 minor_hash
,
411 const struct fscrypt_str
*iname
,
412 struct fscrypt_str
*oname
);
413 bool fscrypt_match_name(const struct fscrypt_name
*fname
,
414 const u8
*de_name
, u32 de_name_len
);
415 u64
fscrypt_fname_siphash(const struct inode
*dir
, const struct qstr
*name
);
418 bool fscrypt_decrypt_bio(struct bio
*bio
);
419 int fscrypt_zeroout_range(const struct inode
*inode
, pgoff_t lblk
,
420 sector_t pblk
, unsigned int len
);
423 int fscrypt_file_open(struct inode
*inode
, struct file
*filp
);
424 int __fscrypt_prepare_link(struct inode
*inode
, struct inode
*dir
,
425 struct dentry
*dentry
);
426 int __fscrypt_prepare_rename(struct inode
*old_dir
, struct dentry
*old_dentry
,
427 struct inode
*new_dir
, struct dentry
*new_dentry
,
429 int __fscrypt_prepare_lookup(struct inode
*dir
, struct dentry
*dentry
,
430 struct fscrypt_name
*fname
);
431 int fscrypt_prepare_lookup_partial(struct inode
*dir
, struct dentry
*dentry
);
432 int __fscrypt_prepare_readdir(struct inode
*dir
);
433 int __fscrypt_prepare_setattr(struct dentry
*dentry
, struct iattr
*attr
);
434 int fscrypt_prepare_setflags(struct inode
*inode
,
435 unsigned int oldflags
, unsigned int flags
);
436 int fscrypt_prepare_symlink(struct inode
*dir
, const char *target
,
437 unsigned int len
, unsigned int max_len
,
438 struct fscrypt_str
*disk_link
);
439 int __fscrypt_encrypt_symlink(struct inode
*inode
, const char *target
,
440 unsigned int len
, struct fscrypt_str
*disk_link
);
441 const char *fscrypt_get_symlink(struct inode
*inode
, const void *caddr
,
442 unsigned int max_size
,
443 struct delayed_call
*done
);
444 int fscrypt_symlink_getattr(const struct path
*path
, struct kstat
*stat
);
445 static inline void fscrypt_set_ops(struct super_block
*sb
,
446 const struct fscrypt_operations
*s_cop
)
450 #else /* !CONFIG_FS_ENCRYPTION */
452 static inline struct fscrypt_inode_info
*
453 fscrypt_get_inode_info(const struct inode
*inode
)
458 static inline bool fscrypt_needs_contents_encryption(const struct inode
*inode
)
463 static inline void fscrypt_handle_d_move(struct dentry
*dentry
)
467 static inline bool fscrypt_is_nokey_name(const struct dentry
*dentry
)
472 static inline void fscrypt_prepare_dentry(struct dentry
*dentry
,
478 static inline void fscrypt_enqueue_decrypt_work(struct work_struct
*work
)
482 static inline struct page
*fscrypt_encrypt_pagecache_blocks(struct page
*page
,
487 return ERR_PTR(-EOPNOTSUPP
);
490 static inline int fscrypt_encrypt_block_inplace(const struct inode
*inode
,
493 unsigned int offs
, u64 lblk_num
,
499 static inline int fscrypt_decrypt_pagecache_blocks(struct folio
*folio
,
500 size_t len
, size_t offs
)
505 static inline int fscrypt_decrypt_block_inplace(const struct inode
*inode
,
508 unsigned int offs
, u64 lblk_num
)
513 static inline bool fscrypt_is_bounce_page(struct page
*page
)
518 static inline struct page
*fscrypt_pagecache_page(struct page
*bounce_page
)
521 return ERR_PTR(-EINVAL
);
524 static inline bool fscrypt_is_bounce_folio(struct folio
*folio
)
529 static inline struct folio
*fscrypt_pagecache_folio(struct folio
*bounce_folio
)
532 return ERR_PTR(-EINVAL
);
535 static inline void fscrypt_free_bounce_page(struct page
*bounce_page
)
540 static inline int fscrypt_ioctl_set_policy(struct file
*filp
,
541 const void __user
*arg
)
546 static inline int fscrypt_ioctl_get_policy(struct file
*filp
, void __user
*arg
)
551 static inline int fscrypt_ioctl_get_policy_ex(struct file
*filp
,
557 static inline int fscrypt_ioctl_get_nonce(struct file
*filp
, void __user
*arg
)
562 static inline int fscrypt_has_permitted_context(struct inode
*parent
,
568 static inline int fscrypt_set_context(struct inode
*inode
, void *fs_data
)
573 struct fscrypt_dummy_policy
{
577 fscrypt_parse_test_dummy_encryption(const struct fs_parameter
*param
,
578 struct fscrypt_dummy_policy
*dummy_policy
)
584 fscrypt_dummy_policies_equal(const struct fscrypt_dummy_policy
*p1
,
585 const struct fscrypt_dummy_policy
*p2
)
590 static inline void fscrypt_show_test_dummy_encryption(struct seq_file
*seq
,
592 struct super_block
*sb
)
597 fscrypt_is_dummy_policy_set(const struct fscrypt_dummy_policy
*dummy_policy
)
603 fscrypt_free_dummy_policy(struct fscrypt_dummy_policy
*dummy_policy
)
608 static inline void fscrypt_destroy_keyring(struct super_block
*sb
)
612 static inline int fscrypt_ioctl_add_key(struct file
*filp
, void __user
*arg
)
617 static inline int fscrypt_ioctl_remove_key(struct file
*filp
, void __user
*arg
)
622 static inline int fscrypt_ioctl_remove_key_all_users(struct file
*filp
,
628 static inline int fscrypt_ioctl_get_key_status(struct file
*filp
,
636 static inline int fscrypt_prepare_new_inode(struct inode
*dir
,
640 if (IS_ENCRYPTED(dir
))
645 static inline void fscrypt_put_encryption_info(struct inode
*inode
)
650 static inline void fscrypt_free_inode(struct inode
*inode
)
654 static inline int fscrypt_drop_inode(struct inode
*inode
)
660 static inline int fscrypt_setup_filename(struct inode
*dir
,
661 const struct qstr
*iname
,
662 int lookup
, struct fscrypt_name
*fname
)
664 if (IS_ENCRYPTED(dir
))
667 memset(fname
, 0, sizeof(*fname
));
668 fname
->usr_fname
= iname
;
669 fname
->disk_name
.name
= (unsigned char *)iname
->name
;
670 fname
->disk_name
.len
= iname
->len
;
674 static inline void fscrypt_free_filename(struct fscrypt_name
*fname
)
679 static inline int fscrypt_fname_alloc_buffer(u32 max_encrypted_len
,
680 struct fscrypt_str
*crypto_str
)
685 static inline void fscrypt_fname_free_buffer(struct fscrypt_str
*crypto_str
)
690 static inline int fscrypt_fname_disk_to_usr(const struct inode
*inode
,
691 u32 hash
, u32 minor_hash
,
692 const struct fscrypt_str
*iname
,
693 struct fscrypt_str
*oname
)
698 static inline bool fscrypt_match_name(const struct fscrypt_name
*fname
,
699 const u8
*de_name
, u32 de_name_len
)
701 /* Encryption support disabled; use standard comparison */
702 if (de_name_len
!= fname
->disk_name
.len
)
704 return !memcmp(de_name
, fname
->disk_name
.name
, fname
->disk_name
.len
);
707 static inline u64
fscrypt_fname_siphash(const struct inode
*dir
,
708 const struct qstr
*name
)
714 static inline int fscrypt_d_revalidate(struct dentry
*dentry
,
721 static inline bool fscrypt_decrypt_bio(struct bio
*bio
)
726 static inline int fscrypt_zeroout_range(const struct inode
*inode
, pgoff_t lblk
,
727 sector_t pblk
, unsigned int len
)
734 static inline int fscrypt_file_open(struct inode
*inode
, struct file
*filp
)
736 if (IS_ENCRYPTED(inode
))
741 static inline int __fscrypt_prepare_link(struct inode
*inode
, struct inode
*dir
,
742 struct dentry
*dentry
)
747 static inline int __fscrypt_prepare_rename(struct inode
*old_dir
,
748 struct dentry
*old_dentry
,
749 struct inode
*new_dir
,
750 struct dentry
*new_dentry
,
756 static inline int __fscrypt_prepare_lookup(struct inode
*dir
,
757 struct dentry
*dentry
,
758 struct fscrypt_name
*fname
)
763 static inline int fscrypt_prepare_lookup_partial(struct inode
*dir
,
764 struct dentry
*dentry
)
769 static inline int __fscrypt_prepare_readdir(struct inode
*dir
)
774 static inline int __fscrypt_prepare_setattr(struct dentry
*dentry
,
780 static inline int fscrypt_prepare_setflags(struct inode
*inode
,
781 unsigned int oldflags
,
787 static inline int fscrypt_prepare_symlink(struct inode
*dir
,
790 unsigned int max_len
,
791 struct fscrypt_str
*disk_link
)
793 if (IS_ENCRYPTED(dir
))
795 disk_link
->name
= (unsigned char *)target
;
796 disk_link
->len
= len
+ 1;
797 if (disk_link
->len
> max_len
)
798 return -ENAMETOOLONG
;
802 static inline int __fscrypt_encrypt_symlink(struct inode
*inode
,
805 struct fscrypt_str
*disk_link
)
810 static inline const char *fscrypt_get_symlink(struct inode
*inode
,
812 unsigned int max_size
,
813 struct delayed_call
*done
)
815 return ERR_PTR(-EOPNOTSUPP
);
818 static inline int fscrypt_symlink_getattr(const struct path
*path
,
824 static inline void fscrypt_set_ops(struct super_block
*sb
,
825 const struct fscrypt_operations
*s_cop
)
829 #endif /* !CONFIG_FS_ENCRYPTION */
832 #ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
834 bool __fscrypt_inode_uses_inline_crypto(const struct inode
*inode
);
836 void fscrypt_set_bio_crypt_ctx(struct bio
*bio
,
837 const struct inode
*inode
, u64 first_lblk
,
840 void fscrypt_set_bio_crypt_ctx_bh(struct bio
*bio
,
841 const struct buffer_head
*first_bh
,
844 bool fscrypt_mergeable_bio(struct bio
*bio
, const struct inode
*inode
,
847 bool fscrypt_mergeable_bio_bh(struct bio
*bio
,
848 const struct buffer_head
*next_bh
);
850 bool fscrypt_dio_supported(struct inode
*inode
);
852 u64
fscrypt_limit_io_blocks(const struct inode
*inode
, u64 lblk
, u64 nr_blocks
);
854 #else /* CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
856 static inline bool __fscrypt_inode_uses_inline_crypto(const struct inode
*inode
)
861 static inline void fscrypt_set_bio_crypt_ctx(struct bio
*bio
,
862 const struct inode
*inode
,
863 u64 first_lblk
, gfp_t gfp_mask
) { }
865 static inline void fscrypt_set_bio_crypt_ctx_bh(
867 const struct buffer_head
*first_bh
,
870 static inline bool fscrypt_mergeable_bio(struct bio
*bio
,
871 const struct inode
*inode
,
877 static inline bool fscrypt_mergeable_bio_bh(struct bio
*bio
,
878 const struct buffer_head
*next_bh
)
883 static inline bool fscrypt_dio_supported(struct inode
*inode
)
885 return !fscrypt_needs_contents_encryption(inode
);
888 static inline u64
fscrypt_limit_io_blocks(const struct inode
*inode
, u64 lblk
,
893 #endif /* !CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
896 * fscrypt_inode_uses_inline_crypto() - test whether an inode uses inline
898 * @inode: an inode. If encrypted, its key must be set up.
900 * Return: true if the inode requires file contents encryption and if the
901 * encryption should be done in the block layer via blk-crypto rather
902 * than in the filesystem layer.
904 static inline bool fscrypt_inode_uses_inline_crypto(const struct inode
*inode
)
906 return fscrypt_needs_contents_encryption(inode
) &&
907 __fscrypt_inode_uses_inline_crypto(inode
);
911 * fscrypt_inode_uses_fs_layer_crypto() - test whether an inode uses fs-layer
913 * @inode: an inode. If encrypted, its key must be set up.
915 * Return: true if the inode requires file contents encryption and if the
916 * encryption should be done in the filesystem layer rather than in the
917 * block layer via blk-crypto.
919 static inline bool fscrypt_inode_uses_fs_layer_crypto(const struct inode
*inode
)
921 return fscrypt_needs_contents_encryption(inode
) &&
922 !__fscrypt_inode_uses_inline_crypto(inode
);
926 * fscrypt_has_encryption_key() - check whether an inode has had its key set up
927 * @inode: the inode to check
929 * Return: %true if the inode has had its encryption key set up, else %false.
931 * Usually this should be preceded by fscrypt_get_encryption_info() to try to
932 * set up the key first.
934 static inline bool fscrypt_has_encryption_key(const struct inode
*inode
)
936 return fscrypt_get_inode_info(inode
) != NULL
;
940 * fscrypt_prepare_link() - prepare to link an inode into a possibly-encrypted
942 * @old_dentry: an existing dentry for the inode being linked
943 * @dir: the target directory
944 * @dentry: negative dentry for the target filename
946 * A new link can only be added to an encrypted directory if the directory's
947 * encryption key is available --- since otherwise we'd have no way to encrypt
950 * We also verify that the link will not violate the constraint that all files
951 * in an encrypted directory tree use the same encryption policy.
953 * Return: 0 on success, -ENOKEY if the directory's encryption key is missing,
954 * -EXDEV if the link would result in an inconsistent encryption policy, or
955 * another -errno code.
957 static inline int fscrypt_prepare_link(struct dentry
*old_dentry
,
959 struct dentry
*dentry
)
961 if (IS_ENCRYPTED(dir
))
962 return __fscrypt_prepare_link(d_inode(old_dentry
), dir
, dentry
);
967 * fscrypt_prepare_rename() - prepare for a rename between possibly-encrypted
969 * @old_dir: source directory
970 * @old_dentry: dentry for source file
971 * @new_dir: target directory
972 * @new_dentry: dentry for target location (may be negative unless exchanging)
973 * @flags: rename flags (we care at least about %RENAME_EXCHANGE)
975 * Prepare for ->rename() where the source and/or target directories may be
976 * encrypted. A new link can only be added to an encrypted directory if the
977 * directory's encryption key is available --- since otherwise we'd have no way
978 * to encrypt the filename. A rename to an existing name, on the other hand,
979 * *is* cryptographically possible without the key. However, we take the more
980 * conservative approach and just forbid all no-key renames.
982 * We also verify that the rename will not violate the constraint that all files
983 * in an encrypted directory tree use the same encryption policy.
985 * Return: 0 on success, -ENOKEY if an encryption key is missing, -EXDEV if the
986 * rename would cause inconsistent encryption policies, or another -errno code.
988 static inline int fscrypt_prepare_rename(struct inode
*old_dir
,
989 struct dentry
*old_dentry
,
990 struct inode
*new_dir
,
991 struct dentry
*new_dentry
,
994 if (IS_ENCRYPTED(old_dir
) || IS_ENCRYPTED(new_dir
))
995 return __fscrypt_prepare_rename(old_dir
, old_dentry
,
996 new_dir
, new_dentry
, flags
);
1001 * fscrypt_prepare_lookup() - prepare to lookup a name in a possibly-encrypted
1003 * @dir: directory being searched
1004 * @dentry: filename being looked up
1005 * @fname: (output) the name to use to search the on-disk directory
1007 * Prepare for ->lookup() in a directory which may be encrypted by determining
1008 * the name that will actually be used to search the directory on-disk. If the
1009 * directory's encryption policy is supported by this kernel and its encryption
1010 * key is available, then the lookup is assumed to be by plaintext name;
1011 * otherwise, it is assumed to be by no-key name.
1013 * This will set DCACHE_NOKEY_NAME on the dentry if the lookup is by no-key
1014 * name. In this case the filesystem must assign the dentry a dentry_operations
1015 * which contains fscrypt_d_revalidate (or contains a d_revalidate method that
1016 * calls fscrypt_d_revalidate), so that the dentry will be invalidated if the
1017 * directory's encryption key is later added.
1019 * Return: 0 on success; -ENOENT if the directory's key is unavailable but the
1020 * filename isn't a valid no-key name, so a negative dentry should be created;
1021 * or another -errno code.
1023 static inline int fscrypt_prepare_lookup(struct inode
*dir
,
1024 struct dentry
*dentry
,
1025 struct fscrypt_name
*fname
)
1027 if (IS_ENCRYPTED(dir
))
1028 return __fscrypt_prepare_lookup(dir
, dentry
, fname
);
1030 memset(fname
, 0, sizeof(*fname
));
1031 fname
->usr_fname
= &dentry
->d_name
;
1032 fname
->disk_name
.name
= (unsigned char *)dentry
->d_name
.name
;
1033 fname
->disk_name
.len
= dentry
->d_name
.len
;
1035 fscrypt_prepare_dentry(dentry
, false);
1041 * fscrypt_prepare_readdir() - prepare to read a possibly-encrypted directory
1042 * @dir: the directory inode
1044 * If the directory is encrypted and it doesn't already have its encryption key
1045 * set up, try to set it up so that the filenames will be listed in plaintext
1046 * form rather than in no-key form.
1048 * Return: 0 on success; -errno on error. Note that the encryption key being
1049 * unavailable is not considered an error. It is also not an error if
1050 * the encryption policy is unsupported by this kernel; that is treated
1051 * like the key being unavailable, so that files can still be deleted.
1053 static inline int fscrypt_prepare_readdir(struct inode
*dir
)
1055 if (IS_ENCRYPTED(dir
))
1056 return __fscrypt_prepare_readdir(dir
);
1061 * fscrypt_prepare_setattr() - prepare to change a possibly-encrypted inode's
1063 * @dentry: dentry through which the inode is being changed
1064 * @attr: attributes to change
1066 * Prepare for ->setattr() on a possibly-encrypted inode. On an encrypted file,
1067 * most attribute changes are allowed even without the encryption key. However,
1068 * without the encryption key we do have to forbid truncates. This is needed
1069 * because the size being truncated to may not be a multiple of the filesystem
1070 * block size, and in that case we'd have to decrypt the final block, zero the
1071 * portion past i_size, and re-encrypt it. (We *could* allow truncating to a
1072 * filesystem block boundary, but it's simpler to just forbid all truncates ---
1073 * and we already forbid all other contents modifications without the key.)
1075 * Return: 0 on success, -ENOKEY if the key is missing, or another -errno code
1076 * if a problem occurred while setting up the encryption key.
1078 static inline int fscrypt_prepare_setattr(struct dentry
*dentry
,
1081 if (IS_ENCRYPTED(d_inode(dentry
)))
1082 return __fscrypt_prepare_setattr(dentry
, attr
);
1087 * fscrypt_encrypt_symlink() - encrypt the symlink target if needed
1088 * @inode: symlink inode
1089 * @target: plaintext symlink target
1090 * @len: length of @target excluding null terminator
1091 * @disk_link: (in/out) the on-disk symlink target being prepared
1093 * If the symlink target needs to be encrypted, then this function encrypts it
1094 * into @disk_link->name. fscrypt_prepare_symlink() must have been called
1095 * previously to compute @disk_link->len. If the filesystem did not allocate a
1096 * buffer for @disk_link->name after calling fscrypt_prepare_link(), then one
1097 * will be kmalloc()'ed and the filesystem will be responsible for freeing it.
1099 * Return: 0 on success, -errno on failure
1101 static inline int fscrypt_encrypt_symlink(struct inode
*inode
,
1104 struct fscrypt_str
*disk_link
)
1106 if (IS_ENCRYPTED(inode
))
1107 return __fscrypt_encrypt_symlink(inode
, target
, len
, disk_link
);
1111 /* If *pagep is a bounce page, free it and set *pagep to the pagecache page */
1112 static inline void fscrypt_finalize_bounce_page(struct page
**pagep
)
1114 struct page
*page
= *pagep
;
1116 if (fscrypt_is_bounce_page(page
)) {
1117 *pagep
= fscrypt_pagecache_page(page
);
1118 fscrypt_free_bounce_page(page
);
1122 #endif /* _LINUX_FSCRYPT_H */