ecryptfs: release reference to lower mount if interpose fails
In ecryptfs_lookup_and_interpose_lower() the lower mount is not decremented if allocation of a dentry info struct failed. As a result the lower filesystem cant be unmounted any more (since it is considered busy). This patch corrects the reference counting. Signed-off-by: Lino Sanfilippo <LinoSanfilippo@gmx.de> Cc: stable@kernel.org Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
This commit is contained in:
committed by
Tyler Hicks
parent
c43f7b8fb0
commit
31f73bee3e
@ -264,7 +264,7 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
|
|||||||
printk(KERN_ERR "%s: Out of memory whilst attempting "
|
printk(KERN_ERR "%s: Out of memory whilst attempting "
|
||||||
"to allocate ecryptfs_dentry_info struct\n",
|
"to allocate ecryptfs_dentry_info struct\n",
|
||||||
__func__);
|
__func__);
|
||||||
goto out_dput;
|
goto out_put;
|
||||||
}
|
}
|
||||||
ecryptfs_set_dentry_lower(ecryptfs_dentry, lower_dentry);
|
ecryptfs_set_dentry_lower(ecryptfs_dentry, lower_dentry);
|
||||||
ecryptfs_set_dentry_lower_mnt(ecryptfs_dentry, lower_mnt);
|
ecryptfs_set_dentry_lower_mnt(ecryptfs_dentry, lower_mnt);
|
||||||
@ -339,8 +339,9 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
|
|||||||
out_free_kmem:
|
out_free_kmem:
|
||||||
kmem_cache_free(ecryptfs_header_cache_2, page_virt);
|
kmem_cache_free(ecryptfs_header_cache_2, page_virt);
|
||||||
goto out;
|
goto out;
|
||||||
out_dput:
|
out_put:
|
||||||
dput(lower_dentry);
|
dput(lower_dentry);
|
||||||
|
mntput(lower_mnt);
|
||||||
d_drop(ecryptfs_dentry);
|
d_drop(ecryptfs_dentry);
|
||||||
out:
|
out:
|
||||||
return rc;
|
return rc;
|
||||||
|
Reference in New Issue
Block a user