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 <konishi.ryusuke@lab.ntt.co.jp> Acked-by: Michael Halcrow <mhalcrow@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
b9a0620779
Коммит
a75de1b379
|
@ -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();
|
||||
|
|
Загрузка…
Ссылка в новой задаче