On Thu, Aug 02, 2007 at 10:06:19PM +0900, Ryusuke Konishi wrote: > ecryptfs_init() exits without doing any cleanup jobs if > ecryptfs_init_messaging() fails. In that case, eCryptfs leaves > sysfs entries, leaks memory, and causes an invalid page fault. > This patch fixes the problem. > > Signed-off-by: Ryusuke Konishi <[EMAIL PROTECTED]>
Acked-by: Michael Halcrow <[EMAIL PROTECTED]> > --- > fs/ecryptfs/main.c | 18 +++++++++++++----- > 1 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c > index e557a67..a984972 100644 > --- a/fs/ecryptfs/main.c > +++ b/fs/ecryptfs/main.c > @@ -813,6 +813,15 @@ out: > return rc; > } > > +static void do_sysfs_unregistration(void) > +{ > + sysfs_remove_file(&ecryptfs_subsys.kobj, > + &sysfs_attr_version.attr); > + sysfs_remove_file(&ecryptfs_subsys.kobj, > + &sysfs_attr_version_str.attr); > + subsystem_unregister(&ecryptfs_subsys); > +} > + > static int __init ecryptfs_init(void) > { > int rc; > @@ -851,6 +860,9 @@ static int __init ecryptfs_init(void) > if (rc) { > ecryptfs_printk(KERN_ERR, "Failure occured while attempting to " > "initialize the eCryptfs netlink socket\n"); > + do_sysfs_unregistration(); > + unregister_filesystem(&ecryptfs_fs_type); > + ecryptfs_free_kmem_caches(); > } > out: > return rc; > @@ -858,11 +870,7 @@ out: > > static void __exit ecryptfs_exit(void) > { > - sysfs_remove_file(&ecryptfs_subsys.kobj, > - &sysfs_attr_version.attr); > - sysfs_remove_file(&ecryptfs_subsys.kobj, > - &sysfs_attr_version_str.attr); > - subsystem_unregister(&ecryptfs_subsys); > + do_sysfs_unregistration(); > ecryptfs_release_messaging(ecryptfs_transport); > unregister_filesystem(&ecryptfs_fs_type); > ecryptfs_free_kmem_caches(); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/