ecryptfs: redo dget,mntget on dentry_open failure
PATCH 1/1 ecryptfs: redo dget,mntget on dentry_open failure
Thanks to Jeff Moyer for pointing this out.
If the RDWR dentry_open() in ecryptfs_init_persistent_file fails, it will do a dput/mntput. Need to re-take references if we retry as RDONLY.
Signed-off-by Eric Sandeen <[email protected]>
---
fs/ecryptfs/main.c +4 -1
@@ -138,11 +138,14 @@ int ecryptfs_init_persistent_file(struct inode_info->lower_file =dentry_open (lower_dentry, lower_mnt, (O_RDWR |O_LARGEFILE )); -if (IS_ERR (inode_info->lower_file)) +if (IS_ERR (inode_info->lower_file)) { +dget (lower_dentry); +mntget (lower_mnt); inode_info->lower_file =dentry_open (lower_dentry, lower_mnt, (O_RDONLY |O_LARGEFILE )); + }if (IS_ERR (inode_info->lower_file)) { printk(KERN_ERR "Error opening lower persistent file " "for lower_dentry [0x%p] and lower_mnt [0x%p]\n",
Quoted 7 lines · Eric Sandeen
Thanks to Jeff Moyer for pointing this out.
If the RDWR
dentry_open()inecryptfs_init_persistent_filefails, it will do a dput/mntput. Need to re-take references if we retry as RDONLY.Signed-off-by Eric Sandeen <[email protected]>
Signed-off-by Jeff Moyer <[email protected]>
Thanks,
Jeff
Quoted 7 lines · Eric Sandeen
Thanks to Jeff Moyer for pointing this out.
If the RDWR
dentry_open()inecryptfs_init_persistent_filefails, it will do a dput/mntput. Need to re-take references if we retry as RDONLY.Signed-off-by Eric Sandeen <[email protected]>
Acked-by Mike Halcrow <[email protected]>
Quoted 23 lines
---
Index:
linux-2.6.24-rc3/fs/ecryptfs/main.c
===================================================================fs/ecryptfs/main.c +4
-1@@ -138,11 +138,14 @@ int ecryptfs_init_persistent_file(struct inode_info->lower_file =dentry_open (lower_dentry, lower_mnt, (O_RDWR |O_LARGEFILE )); -if (IS_ERR (inode_info->lower_file)) +if (IS_ERR (inode_info->lower_file)) { +dget (lower_dentry); +mntget (lower_mnt); inode_info->lower_file =dentry_open (lower_dentry, lower_mnt, (O_RDONLY |O_LARGEFILE )); + }if (IS_ERR (inode_info->lower_file)) { printk(KERN_ERR "Error opening lower persistent file " "for lower_dentry [0x%p] and lower_mnt [0x%p]\n",