Re: [PATCH 1/3] fscrypto: use dget_parent() in fscrypt_d_revalidate()

From: Al Viro
Date: Tue Apr 12 2016 - 18:33:14 EST


On Tue, Apr 12, 2016 at 10:27:20AM -0700, Jaegeuk Kim wrote:
> This patch updates fscrypto along with the below ext4 crypto change.
>
> Fixes: 3d43bcfef5f0 ("ext4 crypto: use dget_parent() in ext4_d_revalidate()")

> static int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
> {
> - struct inode *dir = d_inode(dentry->d_parent);
> - 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 (!d_inode(dir)->i_sb->s_cop->is_encrypted(d_inode(dir))) {
> + dput(dir);

... and as soon as you call it from RCU mode, you are screwed.