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: Roberto Sassu <roberto.sassu@polito.it> Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
This commit is contained in:
parent
070baa5128
commit
27992890b0
2 changed files with 21 additions and 27 deletions
|
@ -191,15 +191,13 @@ static int ecryptfs_open(struct inode *inode, struct file *file)
|
|||
| ECRYPTFS_ENCRYPTED);
|
||||
}
|
||||
mutex_unlock(&crypt_stat->cs_mutex);
|
||||
if (!ecryptfs_inode_to_private(inode)->lower_file) {
|
||||
rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error attempting to initialize "
|
||||
"the persistent file for the dentry with name "
|
||||
"[%s]; rc = [%d]\n", __func__,
|
||||
ecryptfs_dentry->d_name.name, rc);
|
||||
goto out_free;
|
||||
}
|
||||
rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error attempting to initialize "
|
||||
"the persistent file for the dentry with name "
|
||||
"[%s]; rc = [%d]\n", __func__,
|
||||
ecryptfs_dentry->d_name.name, rc);
|
||||
goto out_free;
|
||||
}
|
||||
if ((ecryptfs_inode_to_private(inode)->lower_file->f_flags & O_RDONLY)
|
||||
&& !(file->f_flags & O_RDONLY)) {
|
||||
|
|
|
@ -185,15 +185,13 @@ static int ecryptfs_initialize_file(struct dentry *ecryptfs_dentry)
|
|||
"context; rc = [%d]\n", rc);
|
||||
goto out;
|
||||
}
|
||||
if (!ecryptfs_inode_to_private(ecryptfs_dentry->d_inode)->lower_file) {
|
||||
rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error attempting to initialize "
|
||||
"the persistent file for the dentry with name "
|
||||
"[%s]; rc = [%d]\n", __func__,
|
||||
ecryptfs_dentry->d_name.name, rc);
|
||||
goto out;
|
||||
}
|
||||
rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error attempting to initialize "
|
||||
"the persistent file for the dentry with name "
|
||||
"[%s]; rc = [%d]\n", __func__,
|
||||
ecryptfs_dentry->d_name.name, rc);
|
||||
goto out;
|
||||
}
|
||||
rc = ecryptfs_write_metadata(ecryptfs_dentry);
|
||||
if (rc) {
|
||||
|
@ -302,15 +300,13 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
|
|||
rc = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
if (!ecryptfs_inode_to_private(ecryptfs_dentry->d_inode)->lower_file) {
|
||||
rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error attempting to initialize "
|
||||
"the persistent file for the dentry with name "
|
||||
"[%s]; rc = [%d]\n", __func__,
|
||||
ecryptfs_dentry->d_name.name, rc);
|
||||
goto out_free_kmem;
|
||||
}
|
||||
rc = ecryptfs_init_persistent_file(ecryptfs_dentry);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error attempting to initialize "
|
||||
"the persistent file for the dentry with name "
|
||||
"[%s]; rc = [%d]\n", __func__,
|
||||
ecryptfs_dentry->d_name.name, rc);
|
||||
goto out_free_kmem;
|
||||
}
|
||||
crypt_stat = &ecryptfs_inode_to_private(
|
||||
ecryptfs_dentry->d_inode)->crypt_stat;
|
||||
|
|
Loading…
Add table
Reference in a new issue