aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ecryptfs/inode.c
diff options
context:
space:
mode:
authorLino Sanfilippo <LinoSanfilippo@gmx.de>2010-07-29 07:01:36 -0400
committerTyler Hicks <tyhicks@linux.vnet.ibm.com>2010-08-09 11:33:05 -0400
commit31f73bee3e170b7cabb35db9e2f4bf7919b9d036 (patch)
tree70c0ebb11bb3839050df7fa26b42c94d05cf6a3c /fs/ecryptfs/inode.c
parentc43f7b8fb03be8bcc579bfc4e6ab70eac887ab55 (diff)
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>
Diffstat (limited to 'fs/ecryptfs/inode.c')
-rw-r--r--fs/ecryptfs/inode.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index 31ef5252f0fe..8cd617b66baa 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -264,7 +264,7 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
264 printk(KERN_ERR "%s: Out of memory whilst attempting " 264 printk(KERN_ERR "%s: Out of memory whilst attempting "
265 "to allocate ecryptfs_dentry_info struct\n", 265 "to allocate ecryptfs_dentry_info struct\n",
266 __func__); 266 __func__);
267 goto out_dput; 267 goto out_put;
268 } 268 }
269 ecryptfs_set_dentry_lower(ecryptfs_dentry, lower_dentry); 269 ecryptfs_set_dentry_lower(ecryptfs_dentry, lower_dentry);
270 ecryptfs_set_dentry_lower_mnt(ecryptfs_dentry, lower_mnt); 270 ecryptfs_set_dentry_lower_mnt(ecryptfs_dentry, lower_mnt);
@@ -339,8 +339,9 @@ int ecryptfs_lookup_and_interpose_lower(struct dentry *ecryptfs_dentry,
339out_free_kmem: 339out_free_kmem:
340 kmem_cache_free(ecryptfs_header_cache_2, page_virt); 340 kmem_cache_free(ecryptfs_header_cache_2, page_virt);
341 goto out; 341 goto out;
342out_dput: 342out_put:
343 dput(lower_dentry); 343 dput(lower_dentry);
344 mntput(lower_mnt);
344 d_drop(ecryptfs_dentry); 345 d_drop(ecryptfs_dentry);
345out: 346out:
346 return rc; 347 return rc;