Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a75de1b3 authored by Ryusuke Konishi's avatar Ryusuke Konishi Committed by Linus Torvalds
Browse files

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: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
Acked-by: default avatarMichael Halcrow <mhalcrow@us.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b9a06207
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -813,6 +813,15 @@ static int do_sysfs_registration(void)
	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 @@ static int __init ecryptfs_init(void)

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();