diff options
| author | Eric Biggers <ebiggers@google.com> | 2017-10-09 12:15:39 -0700 |
|---|---|---|
| committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2018-01-04 18:20:22 -0800 |
| commit | 8c815f381cd6224828e63dbfb5435bdd58240ed4 (patch) | |
| tree | 4e7480beaac8d05e36dbf76612da3f48306f7af5 /include/linux | |
| parent | 272e43502577d08921becbce635d8e0a48c8086d (diff) | |
fscrypt: new helper function - fscrypt_require_key()
Add a helper function which checks if an inode is encrypted, and if so,
tries to set up its encryption key. This is a pattern which is
duplicated in multiple places in each of ext4, f2fs, and ubifs --- for
example, when a regular file is asked to be opened or truncated.
Acked-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/fscrypt.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h index 800e0f812f36..b1e3914c3e49 100644 --- a/include/linux/fscrypt.h +++ b/include/linux/fscrypt.h @@ -148,5 +148,30 @@ static inline bool fscrypt_has_encryption_key(const struct inode *inode) #include <linux/fscrypt_notsupp.h> #endif /* __FS_HAS_ENCRYPTION */ +/** + * fscrypt_require_key - require an inode's encryption key + * @inode: the inode we need the key for + * + * If the inode is encrypted, set up its encryption key if not already done. + * Then require that the key be present and return -ENOKEY otherwise. + * + * No locks are needed, and the key will live as long as the struct inode --- so + * it won't go away from under you. + * + * Return: 0 on success, -ENOKEY if the key is missing, or another -errno code + * if a problem occurred while setting up the encryption key. + */ +static inline int fscrypt_require_key(struct inode *inode) +{ + if (IS_ENCRYPTED(inode)) { + int err = fscrypt_get_encryption_info(inode); + + if (err) + return err; + if (!fscrypt_has_encryption_key(inode)) + return -ENOKEY; + } + return 0; +} #endif /* _LINUX_FSCRYPT_H */ |
