aboutsummaryrefslogtreecommitdiff
path: root/fs/crypto
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2016-04-11 15:10:11 -0700
committerMister Oyster <oysterized@gmail.com>2017-04-13 12:33:15 +0200
commitdd502e4ea6da3601bc29639142c10937c3bcd26f (patch)
treea2ae147e9533936e24bdff939f28f1aa01ab9c98 /fs/crypto
parentc7211544d7ef888e777700cbea05770b81169d82 (diff)
fscrypto: use dget_parent() in fscrypt_d_revalidate()
This patch updates fscrypto along with the below ext4 crypto change. Fixes: 3d43bcfef5f0 ("ext4 crypto: use dget_parent() in ext4_d_revalidate()") Cc: Theodore Ts'o <tytso@mit.edu> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Conflicts: fs/crypto/crypto.c
Diffstat (limited to 'fs/crypto')
-rw-r--r--fs/crypto/crypto.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c
index 4d3e50623..aec064f2c 100644
--- a/fs/crypto/crypto.c
+++ b/fs/crypto/crypto.c
@@ -344,13 +344,17 @@ EXPORT_SYMBOL(fscrypt_zeroout_range);
*/
static int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
{
- struct inode *dir = dentry->d_parent->d_inode;
- struct fscrypt_info *ci = dir->i_crypt_info;
+ struct dentry *dir;
+ struct fscrypt_info *ci;
int dir_has_key, cached_with_key;
- if (!dir->i_sb->s_cop->is_encrypted(dir))
+ dir = dget_parent(dentry);
+ if (!dir->d_inode->i_sb->s_cop->is_encrypted(dir->d_inode)) {
+ dput(dir);
return 0;
+ }
+ ci = dir->d_inode->i_crypt_info;
if (ci && ci->ci_keyring_key &&
(ci->ci_keyring_key->flags & ((1 << KEY_FLAG_INVALIDATED) |
(1 << KEY_FLAG_REVOKED) |
@@ -362,6 +366,7 @@ static int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
cached_with_key = dentry->d_flags & DCACHE_ENCRYPTED_WITH_KEY;
spin_unlock(&dentry->d_lock);
dir_has_key = (ci != NULL);
+ dput(dir);
/*
* If the dentry was cached without the key, and it is a