Commit 27992890 authored by Roberto Sassu's avatar Roberto Sassu Committed by Tyler Hicks

ecryptfs: test lower_file pointer when lower_file_mutex is locked

This patch prevents the lower_file pointer in the 'ecryptfs_inode_info'
structure to be checked when the mutex 'lower_file_mutex' is not locked.
Signed-off-by: default avatarRoberto Sassu <roberto.sassu@polito.it>
Signed-off-by: default avatarTyler Hicks <tyhicks@linux.vnet.ibm.com>
parent 070baa51
...@@ -191,15 +191,13 @@ static int ecryptfs_open(struct inode *inode, struct file *file) ...@@ -191,15 +191,13 @@ static int ecryptfs_open(struct inode *inode, struct file *file)
| ECRYPTFS_ENCRYPTED); | ECRYPTFS_ENCRYPTED);
} }
mutex_unlock(&crypt_stat->cs_mutex); mutex_unlock(&crypt_stat->cs_mutex);
if (!ecryptfs_inode_to_private(inode)->lower_file) { rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
rc = ecryptfs_init_persistent_file(ecryptfs_dentry); if (rc) {
if (rc) { printk(KERN_ERR "%s: Error attempting to initialize "
printk(KERN_ERR "%s: Error attempting to initialize " "the persistent file for the dentry with name "
"the persistent file for the dentry with name " "[%s]; rc = [%d]\n", __func__,
"[%s]; rc = [%d]\n", __func__, ecryptfs_dentry->d_name.name, rc);
ecryptfs_dentry->d_name.name, rc); goto out_free;
goto out_free;
}
} }
if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY) if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY)
&& !(file->f_flags & O_RDONLY)) { && !(file->f_flags & O_RDONLY)) {
......
...@@ -185,15 +185,13 @@ static int ecryptfs_initialize_file(struct dentry *ecryptfs_dentry) ...@@ -185,15 +185,13 @@ static int ecryptfs_initialize_file(struct dentry *ecryptfs_dentry)
"context; rc = [%d]\n", rc); "context; rc = [%d]\n", rc);
goto out; goto out;
} }
if (!ecryptfs_inode_to_private(ecryptfs_dentry->d_inode)->lower_file) { rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
rc = ecryptfs_init_persistent_file(ecryptfs_dentry); if (rc) {
if (rc) { printk(KERN_ERR "%s: Error attempting to initialize "
printk(KERN_ERR "%s: Error attempting to initialize " "the persistent file for the dentry with name "
"the persistent file for the dentry with name " "[%s]; rc = [%d]\n", __func__,
"[%s]; rc = [%d]\n", __func__, ecryptfs_dentry->d_name.name, rc);
ecryptfs_dentry->d_name.name, rc); goto out;
goto out;
}
} }
rc = ecryptfs_write_metadata(ecryptfs_dentry); rc = ecryptfs_write_metadata(ecryptfs_dentry);
if (rc) { if (rc) {
...@@ -302,15 +300,13 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry, ...@@ -302,15 +300,13 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
rc = -ENOMEM; rc = -ENOMEM;
goto out; goto out;
} }
if (!ecryptfs_inode_to_private(ecryptfs_dentry->d_inode)->lower_file) { rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
rc = ecryptfs_init_persistent_file(ecryptfs_dentry); if (rc) {
if (rc) { printk(KERN_ERR "%s: Error attempting to initialize "
printk(KERN_ERR "%s: Error attempting to initialize " "the persistent file for the dentry with name "
"the persistent file for the dentry with name " "[%s]; rc = [%d]\n", __func__,
"[%s]; rc = [%d]\n", __func__, ecryptfs_dentry->d_name.name, rc);
ecryptfs_dentry->d_name.name, rc); goto out_free_kmem;
goto out_free_kmem;
}
} }
crypt_stat = &ecryptfs_inode_to_private( crypt_stat = &ecryptfs_inode_to_private(
ecryptfs_dentry->d_inode)->crypt_stat; ecryptfs_dentry->d_inode)->crypt_stat;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment