Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a75de1b3799f8933d6d2b64bdf31194368ec98ab
Commit:     a75de1b3799f8933d6d2b64bdf31194368ec98ab
Parent:     b9a0620779d3714abd63dfc28284f5fa2c1fc091
Author:     Ryusuke Konishi <[EMAIL PROTECTED]>
AuthorDate: Fri Aug 10 13:00:56 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sat Aug 11 15:47:40 2007 -0700

    eCryptfs: fix error handling in ecryptfs_init
    
    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]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[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 git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to