diff options
Diffstat (limited to 'fs/crypto')
-rw-r--r-- | fs/crypto/hooks.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/crypto/hooks.c b/fs/crypto/hooks.c index 491b252843eb..7748db509240 100644 --- a/fs/crypto/hooks.c +++ b/fs/crypto/hooks.c @@ -217,9 +217,13 @@ int __fscrypt_encrypt_symlink(struct inode *inode, const char *target, struct fscrypt_symlink_data *sd; unsigned int ciphertext_len; - err = fscrypt_require_key(inode); - if (err) - return err; + /* + * fscrypt_prepare_new_inode() should have already set up the new + * symlink inode's encryption key. We don't wait until now to do it, + * since we may be in a filesystem transaction now. + */ + if (WARN_ON_ONCE(!fscrypt_has_encryption_key(inode))) + return -ENOKEY; if (disk_link->name) { /* filesystem-provided buffer */ |