forked from Minki/linux
eCryptfs: Lock lower directory inode mutex during lookup
This patch locks the lower directory inode's i_mutex before calling
lookup_one_len() to find the appropriate dentry in the lower filesystem.
This bug was found thanks to the warning set in commit 2f9092e1
.
Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
This commit is contained in:
parent
e77cc8d243
commit
ca8e34f2b0
@ -379,9 +379,11 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
|
||||
goto out_d_drop;
|
||||
}
|
||||
lower_dir_dentry = ecryptfs_dentry_to_lower(ecryptfs_dentry->d_parent);
|
||||
mutex_lock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
lower_dentry = lookup_one_len(ecryptfs_dentry->d_name.name,
|
||||
lower_dir_dentry,
|
||||
ecryptfs_dentry->d_name.len);
|
||||
mutex_unlock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
if (IS_ERR(lower_dentry)) {
|
||||
rc = PTR_ERR(lower_dentry);
|
||||
printk(KERN_ERR "%s: lookup_one_len() returned [%d] on "
|
||||
@ -406,9 +408,11 @@ static struct dentry *ecryptfs_lookup(struct inode *ecryptfs_dir_inode,
|
||||
"filename; rc = [%d]\n", __func__, rc);
|
||||
goto out_d_drop;
|
||||
}
|
||||
mutex_lock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
lower_dentry = lookup_one_len(encrypted_and_encoded_name,
|
||||
lower_dir_dentry,
|
||||
encrypted_and_encoded_name_size - 1);
|
||||
mutex_unlock(&lower_dir_dentry->d_inode->i_mutex);
|
||||
if (IS_ERR(lower_dentry)) {
|
||||
rc = PTR_ERR(lower_dentry);
|
||||
printk(KERN_ERR "%s: lookup_one_len() returned [%d] on "
|
||||
|
Loading…
Reference in New Issue
Block a user