| From 31f73bee3e170b7cabb35db9e2f4bf7919b9d036 Mon Sep 17 00:00:00 2001 |
| From: Lino Sanfilippo <LinoSanfilippo@gmx.de> |
| Date: Thu, 29 Jul 2010 13:01:36 +0200 |
| Subject: ecryptfs: release reference to lower mount if interpose fails |
| |
| From: Lino Sanfilippo <LinoSanfilippo@gmx.de> |
| |
| commit 31f73bee3e170b7cabb35db9e2f4bf7919b9d036 upstream. |
| |
| 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> |
| Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/ecryptfs/inode.c | 5 +++-- |
| 1 file changed, 3 insertions(+), 2 deletions(-) |
| |
| --- a/fs/ecryptfs/inode.c |
| +++ b/fs/ecryptfs/inode.c |
| @@ -264,7 +264,7 @@ int ecryptfs_lookup_and_interpose_lower( |
| printk(KERN_ERR "%s: Out of memory whilst attempting " |
| "to allocate ecryptfs_dentry_info struct\n", |
| __func__); |
| - goto out_dput; |
| + goto out_put; |
| } |
| ecryptfs_set_dentry_lower(ecryptfs_dentry, lower_dentry); |
| ecryptfs_set_dentry_lower_mnt(ecryptfs_dentry, lower_mnt); |
| @@ -339,8 +339,9 @@ int ecryptfs_lookup_and_interpose_lower( |
| out_free_kmem: |
| kmem_cache_free(ecryptfs_header_cache_2, page_virt); |
| goto out; |
| -out_dput: |
| +out_put: |
| dput(lower_dentry); |
| + mntput(lower_mnt); |
| d_drop(ecryptfs_dentry); |
| out: |
| return rc; |